按十进制值递增for循环

时间:2014-05-12 09:58:52

标签: javascript

我正在尝试实现一个递增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等。

有人可以指出我白痴的根源吗?

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();