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的错误后果也是不敢设想的,所以一定要谨慎!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容