将多个带有十进制的数字相加会显示一长串数字 [重复]

Adding multiple Numbers with decimal shows long trail of numbers [duplicate]

提问人:sarojanand 提问时间:1/17/2015 最后编辑:Rudy Velthuissarojanand 更新时间:1/21/2015 访问量:97

问:

我正在尝试从表单输入字段中添加一些十进制数,如下所示:

var total = Number(11000.2)+Number(10000.1)+Number(10762.4);
consol.log(total);

consol 显示 31762.7000000000004

我不明白它从哪里获得加法值 (00000000004) 并显示 .700000000004。

谁能解释一下这里发生了什么以及我错过了什么?

浮点精度

评论

1赞 rayryeng 1/17/2015
这称为浮点精度误差。docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
1赞 JJJ 1/17/2015
此外,这与jQuery无关。
0赞 guest271314 1/17/2015
尝试console.log(Number(total.toFixed(1)))

答:

1赞 Charles Clayton 1/17/2015 #1

这是一个与浮点运算有关的古老问题。你可以在很多这样的帖子中阅读更多关于它的信息: 如何处理 JavaScript 中的浮点数精度?

典型的简单解决方案是将小数视为整数,然后再将它们除回小数。这样:

var a = 0.2;
var b = 0.1;

var r = a + b; // r == 0.300000000004

var r = (10*a + 10*b)/10; // r == 0.3

在你的情况下,我会这样做:

var factor = 10; 
var total = (factor*11000.2 + factor*10000.1 + factor*10762.4) / factor;

// total == 31762.7