`setTimeout` 设置为 1,为什么我的时钟跳秒?

`setTimeout` is set to 1, why is my clock skipping seconds?

我正在研究十进制时钟(100min₁₀ / hr & 100s₁₀ / min₁₀)。 The code 正在跳过小数秒(在 Firefox 中,Chrome 在 Ubuntu 14 & Android 中)。 setTimeout 中的延迟为 1。

function updateTime() {
    var now = new Date()
    var h = now.getHours();
    var m = now.getMinutes();
    var s = now.getSeconds();
    document.getElementById('babylonian').innerHTML = h+":"+padDigit(m)+":"+padDigit(s)
    document.getElementById('decimal').innerHTML = h + "h" + padDigit( Math.round( ( 100 * m ) / 60) ) + "." + padDigit( Math.round( ( 100 * s ) / 60 ) )

    setTimeout(updateTime, 1);
}

function padDigit(i) {
    return i<10 ? '0' + i : i
}

updateTime()

时钟似乎在同步滴答作响。我不明白为什么。

这是因为每分钟有100"decimal seconds",但只有60秒。所以每秒有 100/60 "decimal seconds".

当您基于 now.getSeconds() 进行计算时,您将在 "decimal seconds" 中获得飞跃。

也可以使用更细粒度的东西,例如 now.getMilliseconds():

var s = now.getSeconds() + now.getMilliseconds()/1000;
...
...  ...  ... Math.floor(  s * 100  / 60 )  ...

(对分钟做同样的事情以避免跳过十进制分钟。)