我们知道在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。
解决方法:将小数转换成整型数再计算,代码如下:
|
|
其余的减法和乘除也是一样。