我知道浮點計算可能不準確的事實。例如:如何確保整數除法得出正確的結果?
var x = 100*0.333;
這裏x被設置爲33.300000000000004
,而不是33
。這似乎是一個小問題,但如果涉及四捨五入,則會變得嚴重。例如,Math.ceil(x)
將不正確 - 將產生34
而不是33
。
問題是,我被告知JS在整數和浮點之間沒有太大的區別。所以我擔心是否有辦法確保整體分割是正確的。
JS中整數除法的通常公式似乎是Math.floor(n/m)
,其中n
,m
是整數。所以現在讓我們假設m
均勻分配n
。由於JS將每個數字視爲一個浮點數,所以n/m
將返回一個浮點數。如果這個浮點數不準確,但甚至比實際計算結果小很多,那麼Math.floor(n/m)
將舍入到它應該低於一個整數。
舉例說明:如果,例如,9/3
產生2.999999999999999
而非3
,然後Math.floor(9/3)
將錯誤地產生2
而非3
。其實,Math.floor(9/3)
的確給出了正確的結果,但這當然只是一個例子;替換9
和3
與任何不幸的選擇整數。
這種情況會發生嗎?如果是這樣,有什麼辦法可以確保正確的結果?
JavaScript中的所有數字都是雙精度浮點數。 – Pointy
你不會使用'Math.round(2.99999999999)'而不是Math.floor嗎? – forgetso
@forgetso沒有。我想要整數除法,下舍入。例如,我想從'23/4',而不是'6'獲得'5'。我希望'Math.floor(n/m)'會給我正確的結果,不管'n'和'm'是否可以被整除。 – gaazkam