Javascript 计时器在0.29后停止

Javascript 计时器在0.29后停止,javascript,timer,Javascript,Timer,setInterval(函数(){timer()},100); 函数计时器() { document.getElementById(“计时器”).innerHTML= (parseInt(document.getElementById(“timer”).innerHTML*100)+1)/100; } 0 这是因为浮点数学与您的parseInt()相结合的工作方式。参考 当它达到0.29时,它会达到0.29 x 100,这是您希望得到的29,但实际上是: console.log(0.29 * 1


setInterval(函数(){timer()},100);
函数计时器()
{
document.getElementById(“计时器”).innerHTML=
(parseInt(document.getElementById(“timer”).innerHTML*100)+1)/100;
}
0

这是因为浮点数学与您的
parseInt()
相结合的工作方式。参考

当它达到
0.29
时,它会达到
0.29 x 100
,这是您希望得到的
29
,但实际上是:

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

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

var num = 0.00;

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

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

还应该注意的是,
parseInt
是多余的,因为
*
无论如何都会转换为数字(在这种情况下,函数是有害的)
parseInt
在这里不是多余的,这是问题的根源,因为它删除了小数点,最终导致数字保持在
0.29
。如果删除
parseInt()
,计数器将继续超过
0.29
(尽管显示小数点后的完整位置)。由于正在解析的对象已经是一个数字,因此它的使用是错误的。无论如何,没有抓住要点;)是的,它已经是一个数字,但不是一个整数。如果它是
parseFloat()
,那么它将是完全冗余的。就逻辑而言,
x.innerHTML*100
应该是一个整数(显然不是由于浮点错误),但仍然被传递到
parseInt