为什么会发生这种情况:
window.onload = function(){
var bob=new Number(1);
for (var i=0; i<8 ;i++){
bob=Number(bob+1.1)
}
}
通知: 2.1
3.2
4.300000000000001
5.4
6.5
7.6
8.7
9.799999999999999
答案 0 :(得分:0)
因为在Javascript中,“数字”默认为浮点数。甚至“我”;-)当然还有“鲍勃”。
浮点数是近似值。
如果需要,可以使用“floor()”和“ceil()”
PS: 您还可以使用parseInt()将float转换为int:
parseInt (4.33) // Result = 4
或round():
round (3.2 + 1.1) // 4.3, not 4.300000000000001
答案 1 :(得分:0)
因为javascript Number实际上是双精度浮点数:
来自规范:
4.3.19
Number value
primitive value corresponding to a double-precision
64-bit binary format IEEE 754 value
答案 2 :(得分:0)
这是四舍五入的问题。 4.3
在二进制文件中没有确切的表示。
如何在JavaScript中存储确切的数字实际上是特定于实现的,但它始终是一个二进制浮点数。
修改强>
看起来我的信息有点过时了。该标准现在指定 doubleprecision 64位格式IEEE 754值
链接:
答案 3 :(得分:0)
问题与在base(2)上工作的计算机如何计算base(10)算术有关。有很多文章解释了细微差别。
如果你还没有解决问题,每当你使用浮点数时,你也应该用适当的函数按下输出。
我通常使用number.toFixed()
,它将四舍五入到适当的小数位数。