输入:1.45 + 0.31
输出:1.76
输入:1.45 + 0.32
输出:1.77
输入:1.45 + 0.33
输出:1.78
输入:1.45 + 0.34
输出:1.79
输入:1.45 + 0.35
输出:1.7999999999999998
输入:1.45 + 0.36
输出:1.81
输入:1.45 + 0.37
输出:1.8199999999999998
输入:1.45 + 0.38
输出:1.83
输入:1.45 + 0.39
输出:1.8399999999999999
...
可以看到,一些情况下,比如:
1.45 + 0.35
按正常来说,计算结果应该是:
1.80
但是却输出了:
1.7999999999999998
解决:
java和JavaScript中计算小数运算时,都会先将十进制的小数换算到对应的二进制,一部分小数并不能完整的换算为二进制,这里就出现了第一次的误差。
解决方案:先把小数转成整数,使用整数来进行加减。
输入:(1.45 * 10 + 0.35 *10)/10
输出:1.8
当然,这里要判断下相加两方的小数位数,根据小数位数来决定10的幂数。
输入:(1.451 * 1000 + 0.35 *1000)/1000
输出:1.801
这里的小数最大小数位数为3,所以选取了10的3次幂。