包括0.07*100=7.000000000000001, 2.9/100=0.028999999999999998等等
场景还原:
乘法:
0.28和0.29乘100都没有得到预期的值.
除法:
0.28除100没有得到预期的值, 0.29正常, 但是2.9/100依然有问题.
原因:
浮点数不能直接进行相等比较, 计算机中是采用近似值来保存浮点数的,当进行浮点数相关的计算时,需要时刻提防由于精度问题所导致的误差,并注意避免那些会影响到结果正确性的误差(所谓正确性,就是误差超出了所允许的最大范围)。
解决办法:
因为我的需求是将元为单位的数值转成分给到数据库存储,
所以不存在0.001这种分以下的情况
也不存在有浮点数返回给前端做除法的情况
以下仅供元转分这种使用场景参考
-
// 仅供元转分这种使用场景参考
-
parseInt(
0.28 *
100 +
0.1)
//其中加0.1是解决0.29*100=28.9xxx的问题
拓展: