JavaScript代码:
var n = 1;
while ( n > 0 )
{
n -= 0.1;
document.body.innerHTML += n + "<br/>";
}
我预计:
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
但得到了这个:
0.9
0.8
0.7000000000000001
0.6000000000000001
0.5000000000000001
0.40000000000000013
0.30000000000000016
0.20000000000000015
0.10000000000000014
1.3877787807814457e-16
-0.09999999999999987
有人可以解释那里发生了什么吗?
答案 0 :(得分:7)
您正在看到计算机执行浮点运算的方法。例如,请参阅http://en.wikipedia.org/wiki/Floating_point#Machine_precision
答案 1 :(得分:6)
这将解决您的问题
var n = 1;
while ( n > 0 ){
n -= 0.1;
result = n.toFixed(1);
document.body.innerHTML += result + "<br/>";
}
答案 2 :(得分:6)
为什么我的数字,如0.1 + 0.2加起来不是很好的一轮0.3,而且 相反,我得到一个奇怪的结果,如 0.30000000000000004吗
因为在内部,计算机使用a 格式(二进制浮点) 无法准确表示一个数字 像0.1,0.2或0.3一样。
编译代码时 解释,你的“0.1”已经存在 四舍五入到最接近的数字 格式,这导致一个小的 甚至在之前的舍入错误 计算发生了。
答案 3 :(得分:3)
您正在处理浮点数。查看toFixed和toPrecision方法。
答案 4 :(得分:1)
并非所有数字都可以准确表示,即使它们具有十进制表示法的简单表示。这是因为JavaScript使用IEEE 754来表示浮点值,因此使用base 2而不是base 10.这导致您实际上没有减去0.1(即使您的源代码这样说),但是某些值接近它