Подтвердить что ты не робот

Таймер останавливается после 0,29

    <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>
4b9b3361

Ответ 1

Это из-за того, как математика с плавающей запятой работает в сочетании с вашим parseInt(). См. Ошибка математики с плавающей запятой.

Когда он достигнет 0.29, он выполняет 0.29 x 100, который вы ожидаете получить в 29, но на самом деле это:

console.log(0.29 * 100);
28.999999999999996

Затем вы конвертируете его в целое число с помощью parseInt(), что приводит к 28 (удаление всех десятичных знаков), наконец, вы добавляете 1 и делите на 100, делая результат 0.29, и это повторяется на каждом тике таймера, число не может увеличиваться.

Было бы лучше сохранить исходное значение как переменную и вывести его с помощью .toFixed(2), вместо того, чтобы использовать номер в пользовательском интерфейсе в качестве источника. Вот так:

Fiddle

var num = 0.00;

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

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