今天在无意中发现这个问题。
如:Number(4.2)+Number(9.2)
这两个值相加alert出来等于13.399999999999998,为什么?
如:Number(2.2)+Number(9.7)
alert出来等于11.899999999999998
但是 像这样的 Number(2.3)+Number(9.9)
alert出来等于12.2 。 这个值是我想要的。
为什么有的数值加起来会出现那么多的小数位呢,有的加起来又没有呢???
[code="java"]
先将结果相加,然后用toFixed(2)精确两位小数,再转成Number类型。
参考IEEE 754 的浮点数标准,
简要的原理:数在计算机是没法连续表示的,离散分布,毕竟浮点数是无穷的。
所以有可能13.2没有,就用13.199999近似表示(这只是比喻)
很奇怪。
[code="java"]
alert(Number(4.2)+Number(9.0));
[/code]
13.2
[code="java"]
alert(Number(4.2)+Number(9.1));
[/code]
13.3
[code="java"]
alert(Number(4.2)+Number(9.2));
[/code]
13.39999999998
[code="java"]
alert(Number(4.2)+Number(9.3));
[/code]
13.5
[code="java"]
alert(Number(4.2)+Number(9.4));
[/code]
13.6000000001
[code="javascript"]
var a=Number(2.3)+Number(9.9) ; var b=Math.round(a*10)/10; alert(b);[/code]
.......想知道内部原因。xiangxuehai_jiaer你回答个解决干嘛。知道出现问题,解决很容易的啊。
lz这是JavaScript浮点运算的一个bug,js自身的问题,不用想太多了。
比如:7*0.8 JavaScript算出来就是:5.6000000000000005 .
用Number()或者 toFixed自己处理一下,看你自己爱好了。