定时器在0.29后停止

时间:2014-05-09 15:46:48

标签: javascript timer

    <head>
    <script>
        window.setInterval(function(){timer()},100);
        function timer()
            {
                document.getElementById("timer").innerHTML=
               (parseInt(document.getElementById("timer").innerHTML*100)+1)/100;
            }
    </script>
    </head>
    <body>
        <div id="timer">0.000</div>
    </body>

如您所见,计时器最多只计算0.29

为什么?

1 个答案:

答案 0 :(得分:25)

这是因为浮点数学与你的parseInt()一起工作的方式。请参阅Is floating point math broken

当它达到0.29时,它会0.29 x 100,您期望得到29,但实际上是:{/ p>

console.log(0.29 * 100);
28.999999999999996

接下来,使用parseInt()将其转换为整数,结果为28(删除所有小数位),最后添加1并除以100结果0.29并且在计时器的每个刻度上重复此操作,数字不能增加。

最好将原始值存储为变量并使用.toFixed(2)输出,而不是使用UI上的数字作为源。像这样:

<强> Fiddle

var num = 0.00;

window.setInterval(function () {
    timer();
}, 100);

function timer() {
    num = ((num * 100) + 1) / 100;
    document.getElementById("timer").innerHTML = num.toFixed(2);
}