关于JS中数字相加出现的问题。

今天在无意中发现这个问题。

如: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"]



<pre><code> var a=4.2; var b=9.2; alert(Number((a+b).toFixed(2))); &lt;/script&gt; &lt;/body&gt; </code></pre> <p></html><br> [/code]<br> 为正确结果</p>

先将结果相加,然后用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自己处理一下,看你自己爱好了。