Ответ 1
Это из-за того, как математика с плавающей запятой работает в сочетании с вашим parseInt()
. См. Ошибка математики с плавающей запятой.
Когда он достигнет 0.29
, он выполняет 0.29 x 100
, который вы ожидаете получить в 29
, но на самом деле это:
console.log(0.29 * 100);
28.999999999999996
Затем вы конвертируете его в целое число с помощью parseInt()
, что приводит к 28
(удаление всех десятичных знаков), наконец, вы добавляете 1
и делите на 100
, делая результат 0.29
, и это повторяется на каждом тике таймера, число не может увеличиваться.
Было бы лучше сохранить исходное значение как переменную и вывести его с помощью .toFixed(2)
, вместо того, чтобы использовать номер в пользовательском интерфейсе в качестве источника. Вот так:
var num = 0.00;
window.setInterval(function () {
timer();
}, 100);
function timer() {
num = ((num * 100) + 1) / 100;
document.getElementById("timer").innerHTML = num.toFixed(2);
}