zoukankan      html  css  js  c++  java
  • js处理浮点数一点思考

    作为一名web开发人员,如果我们做到了涉及到费用加加减减的需求 难免会遇到浮点数的计算,就会遇到浮点数精度误差的问题

    假设场景:

               1.接口给你的金额单位是分,页面需要展示的金额单位为元。 最后落档金额为分

               2.需求可以输入优惠金额单位为元(即 用户可以输入浮点数)需要计算实付金额。

    问题:

            第一个场景中 因为金额经历了 从分-->元--->分的历程。 我们实现分到元的是除以100 从分到元是用的是乘以100。 看上去毫无破绽 没看出什么有什么逻辑问题。但是浮点数计算会有计算误差(相关原理,我就不赘述了) 举个例子

           接口给的金额是128109分。我们做页面展示为1281.09元(分-->元)

           这个时候 我们需要将数据落档了 需要将128109存入数据库 我们理所当然的用 1281.09*100 (元-->分) 然后我们发现了什么?

    我们再parseInt取整一下,完了,变成128108了 少了一分钱!! 为了这个问题 看代码看到了大半夜 都没看出来 哪里少了一分钱。原来是浮点数计算的误差导致少了一分钱。

          第二个场景会涉及到浮点数计算 那就更灾难了。0.1+0.2 不等于0.3的情况 相信大家都有所耳闻。

    解决办法:

         1.我个人觉得最好的解决办法是前端不做计算。只做展示。就是说 像第一种场景 别自己写 分-->元--->分,把项目这里取值全部直接去取接口返回的分。

         2.但是我们没办法,前台可能会输入浮点数,我们只能处理。这个时候我们要将浮点数转为整数,避免掉浮点数的运算。等计算完再转为浮点数。

         这里有一个注意点,我们需要先知道我们要计算的浮点数是多少位的。然后我们将浮点数乘以大于精度值的值再去做计算。换句话说 两位小数乘以1000,三位小数乘以10000.

    再看会上面那个例子

    因为我项目中只会存在两位小数。所以 我直接乘以了1000 再除以1000

    那有的项目中可能浮点数的精度并不固定。这个时候我们需要将这个浮点数变成字符串,再通过字符切割函数,将这个数变成小数和整数部分。最后获取小数部分的长度。这样我们就能知道要乘以多少了。

     转为整数后 在进行计算 最后别忘了再转为浮点数

  • 相关阅读:
    Android JNI的使用方法
    Android4.4中jni的native的方法无法找到的解决方案
    如何解决Your project contains C++ files but it is not using a supported native build system
    android-studio开发NDK错误记录:bash: ../../build/intermediates/classes/debug: is a directory
    Android Studio 编译: Program type already present: XXX 解决方案
    ScriptEngineManager is not available in Android and causes a NoClassDefFoundError
    Android 机器人项目Pepper_Android
    Android 优秀开源项目
    准备开发一个运行在Android上的JavaME模拟器
    上周热点回顾(2.3-2.9)团队
  • 原文地址:https://www.cnblogs.com/ada-blog/p/12055965.html
Copyright © 2011-2022 走看看