将多个带小数的数字相加会显示很长的数字尾迹
Adding multiple Numbers with decimal shows long trail of numbers
我正在尝试从表单输入字段中添加一些小数,例如:
var total = Number(11000.2)+Number(10000.1)+Number(10762.4);
consol.log(total);
控制台显示 31762.700000000004
我不明白它从哪里获取附加值 (00000000004) 并显示 .700000000004。
任何人都可以解释这里发生了什么以及我缺少什么吗?
这是一个与浮点运算有关的古老问题。您可以在很多这样的帖子中阅读更多相关信息: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
我正在尝试从表单输入字段中添加一些小数,例如:
var total = Number(11000.2)+Number(10000.1)+Number(10762.4);
consol.log(total);
控制台显示 31762.700000000004
我不明白它从哪里获取附加值 (00000000004) 并显示 .700000000004。
任何人都可以解释这里发生了什么以及我缺少什么吗?
这是一个与浮点运算有关的古老问题。您可以在很多这样的帖子中阅读更多相关信息: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