PFB说明问题的示例代码段:
var x=0.323;
var cumulativeVal = 0;
for(i=0;i<30;i++){
cumulativeVal = cumulativeVal + x;
console.log(cumulativeVal);
}
上述计算的结果是
0.323
0.646
0.9690000000000001
1.292
1.615....
4.845000000000001
5.168000000000001
5.491000000000001
5.814000000000002....
9.690000000000007
请注意,会添加额外的十进制值。我明白这与javascript中的值精度有关。但任何人都可以解释一下吗?
答案 0 :(得分:4)
没有什么特别需要解释的。 IEEE-754 double-precision numbers在十进制方面并不完全精确。小错误可能会蔓延。对于完整的小数精度(您应该注意,它不能完美地代表三分之一),您需要使用为此设计的类型。 (JavaScript没有内置的;其他语言的示例来自Java的BigDecimal
或来自C#的decimal
。)
顺便提一下,有一个更简单的例子:
0.1 + 0.2 = 0.30000000000000004
这是Crockford's收藏夹之一。