js 小数计算有误复盘

大家应该都知道在js中,0.1+0.2不等于0.3,所以首先想到的是将小数换成整数来做计算后,再在除一下,但是最近遇到一个超级奇怪的问题:见图

居然没有变成整数,查询了很多资料,发现是IEEE 754 标准中二进制计算规则的原因:

比如3.1,换算成二进制存储就是 11.0000111111.....1,它不会准确的存为3.1,只能无限接近3.1,于是变成了3.09999...,具体是多少我太不清楚,所以就会导致这样的错误。

处理方法:

利用toFixed(),将其四舍五入,就会变成整数,但是要注意的是toFixed()后,会将‘number’,变成‘string’,见图:

最后再用Number,强制转换一下即可:

总结:

涉及到计算问题都是在金额或者重量等问题上是非常敏感和重要的,哪怕0.01的错误后果也是不敢设想的,所以一定要谨慎!

你可能感兴趣的:(js 小数计算有误复盘)