js中1-0.55=0.44999999999999996怎么解决

如题 今天在使用js进行数据自动结算时出现这样的结果

bjObj.val(parseFloat(1-parseFloat(xzObj.val())));

就是通过这个代码来计算的 结果1-0.55 的0.44999999999999996

请大神讲解说明如果能够修复更好
runjs代码库

阅读 7.4k
4 个回答

用toFixed()来选择保留几位小数

var number = 0.3 - 0.2      //    0.09999999999999998
number.toFixed(2)           //    "0.10"
typeof number.toFixed(2)    //    "string"
number = +number.toFixed(2) //    0.1

也可以用这个big.js

新手上路,请多包涵

如果要做到精确,那先定义好要保留小数点后几位,即精确到10的 k 次方分位。小数点右边第一位是十分位,第二位是百分位。假设要保留小数点后两位,就是精确到百分位,那么先把结果乘以100,再四舍五入取整,再除以100。

Math.round(parseFloat(1 - 0.55) * 100) / 100

如同0.1 + 0.2 不等于0.3一样,这是数值的精度问题,你可以考虑下乘以某个数值例如1000然后再运算,也可以对结果 toFixed ,还可以用 https://github.com/MikeMcl/bignumber.js

这东西是js自身的精度问题,我的做法是:
((1-0.55)+1e-6).toFixed(2) // 2或几 看你的需求
1e-6 是0.000001 //这里的6或几 也是看你的需求

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题