2013-05-09 59 views
0

我正在處理的一個簡單問題是花費一些時間在幾秒鐘內運行300米,並將它們轉換爲字符串以便讀取「9:99.99」。爲了得到秒,我執行以下操作MOD:如何在JavaScript中使MOD正確返回小數?

sec = result % 60; 

這並不如預期工作,除非小數部分爲0.5(即60.5,75.5等)。其他任何小數都會給我一個結果,因爲需要12位以上的有效數字來表示。

例如,64.55%60給我4.5499999999999997作爲結果。

我知道一個簡單的解決方案是將小數點分開,並將結果與​​小數點連接起來,但這只是讓我感興趣。我做錯了什麼,有沒有一種好方法可以單獨使用MOD來解決這個問題?

+0

通常,浮點數不能準確地轉換。 64.55內部將是64.54999999或類似的。如果你需要2位精度,然後嘗試'(6455%6000)/ 100)' – 2013-05-09 15:23:54

+1

閱讀原因:http://stackoverflow.com/questions/588004/is-javascripts-floating-point-math-broken – epascarello 2013-05-09 15:23:58

+0

有趣..我已經編程了大約10年,我認爲這可能是我第一次需要在浮點上做MOD。所有其他語言是否受到相同的限制,還是僅限於Javascript的問題? – Ryan 2013-05-09 15:28:13

回答

1

因此,讓我們假設您的值爲921.856秒。

var value = 921.856; 
var minutes = Math.floor(value/60), // 15   
    seconds = value % 60,   // 21.856 
    time = minutes + ":" + seconds.toFixed(2); // 15:21.86 

爲此沒有四捨五入:

time = minutes + ":" + (Math.floor(seconds * 100)/100).toFixed(2); // 15:21.85