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
。