我正在尝试实现一个递增0.1的for循环。我有一个似乎工作得很好,增量为0.5。虽然这可能是一个“假阳性”,因为0.1的那个给了我一些奇怪的值?
function thisisi() {
var x = 1;
for (var i = (x+0.1); i < 2; i += 0.1) {
console.log('i', i);
}
};
似乎屈服:
i 1.1
i 1.2000000000000002
i 1.3000000000000003
i 1.4000000000000004
i 1.5000000000000004
i 1.6000000000000005
i 1.7000000000000006
i 1.8000000000000007
i 1.9000000000000008
而不是我需要的是1.1,1.2,1.3等。
有人可以指出我白痴的根源吗?
答案 0 :(得分:3)
您可以使用 .toFixed() 来限制小数点后出现的位数:
function thisisi() {
var x = 1;
for (var i = (x+0.1); i < 2; i += 0.1) {
console.log('i', i.toFixed(1));
}
};
<强> Fiddle Demo 强>
答案 1 :(得分:1)
正如“三分之一”(1/3)不能精确地用十进制表示(0.333 ...)那么十分之一(0.1)不能用二进制精确表示(它是0.0001100110011 ......)。
答案 2 :(得分:1)
试试这个:
function thisisi(){
var x = 1;
for (var i = x; i < 2; i += 0.1) {
var str = Math.floor( i * 1000 ) / 1000;
console.log(str);
}
};
thisisi();