添加带小数的多个数字表示数字的长尾迹

时间:2015-01-16 21:09:09

标签: floating-point numbers floating-accuracy

我试图从表单输入字段添加几个十进制数字,如:

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

consol显示31762.700000000004

我不知道从哪里获得加法值(00000000004)并显示.700000000004。

有人可以解释一下这里发生了什么以及我缺少什么吗?

1 个答案:

答案 0 :(得分:1)

这是一个与浮点运算有关的古老问题。您可以在很多帖子中详细了解它:How to deal with floating point number precision in 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