踩坑:js 小数运算出现精度问题
背景
在学习小程序商城源码时发现了这个问题,单价可能出现小数,小数之间运算结果会莫名其妙多出一大串数字,比如下面这样????。
在此之前我是知道 js 中著名的 0.1 + 0.2 != 0.3
的问题的,可是在自个写项目时压根从来没注意过小数运算可能出现的问题。写这篇文章希望以后能牢记于心。
上面可以看到 并不是所有小数运算都会出现精度丢失问题,小数运算为什么会出现精度丢失?
原因
上面是小数转二进制规则,对 0.1 做运算之后得到
0.000 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 (1100)......
后面 1100
是无限循环的,计算机存储数据会给指定大小,比如 double 类型会给 64 个字节来存储,这就意味着上面那串数字得截取,变成了:
0.000 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1101
注意看最后四位本来是 1100
,因为截取变成了 1100
。(在线进制转换可以验证结果)
运算精度出现问题的根本原因也就在于此。
转载于:https://my.oschina.net/dkvirus/blog/3002899