如题 今天在使用js进行数据自动结算时出现这样的结果
bjObj.val(parseFloat(1-parseFloat(xzObj.val())));
就是通过这个代码来计算的 结果1-0.55 的0.44999999999999996
请大神讲解说明如果能够修复更好
runjs代码库
PHP中文网2017-04-10 15:16:06
用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
ringa_lee2017-04-10 15:16:06
如果要做到精确,那先定义好要保留小数点后几位,即精确到10的 k 次方分位。小数点右边第一位是十分位,第二位是百分位。假设要保留小数点后两位,就是精确到百分位,那么先把结果乘以100,再四舍五入取整,再除以100。
Math.round(parseFloat(1 - 0.55) * 100) / 100
高洛峰2017-04-10 15:16:06
如同0.1 + 0.2 不等于0.3一样,这是数值的精度问题,你可以考虑下乘以某个数值例如1000然后再运算,也可以对结果 toFixed ,还可以用 https://github.com/MikeMcl/bignumber.js
迷茫2017-04-10 15:16:06
这东西是js自身的精度问题,我的做法是:
((1-0.55)+1e-6).toFixed(2) // 2或几 看你的需求
1e-6 是0.000001 //这里的6或几 也是看你的需求