我们知道在javascript中小数运算是会出现错误的,例如:
|
|
的计算结果并不是0.3
,而是0.30000000000000004
。
这就很奇怪了,先从javascript
中的number
类型说起吧。
在javascript
中number
类型就是是浮点数,而在javascript
中浮点数是IEEE-754 格式规定的,也就是通过二进制数表示的。用二进制书可以准确的表示1/2
、1/4
、1/8
这类的小数,而表示0.1
这样的小数就会出现问题。
使用二进制表示0.1
会被表示成0.0001 1001 1001 1001…
,其中1001
会无限循环。
使用二进制表示0.2
会被表示成0.0011 0011 0011 0011…
,其中0011
会无限循环。
在javascript
中双精度浮点数的小数部分最多支持 52 位,并且计算会先将数字转换成二进制计算出结果,再转换成十进制数。
所以0.1
和0.2
两者相加之后得到0.0100110011001100110011001100110011001100...
因浮点数小数位的限制而截断的二进制数字,这时候,再把它转换为十进制,就成了 0.30000000000000004
。
解决方法:将小数转换成整型数再计算,代码如下:
|
|
其余的减法和乘除也是一样。