2016-12-07 52 views
0

由於64位浮點表示法,是否有解決JavaScript中臭名昭着的浮點數學錯誤的解決方案? Is floating point math broken?JavaScript中的臭名昭着的64位浮點數學錯誤的解決方案

我試圖做一個基於JavaScript的數學密集型應用程序,但是,由於JavaScript中的這個錯誤,它總是會導致不準確的輸出。

對於前: 0.1 + 0.2 = 0.30000000000000004 ,而預期爲0.1 0.2 + 0.3 =

我不知道像金融機構(貝寶)如何仍然了有JavaScript應用程序。

+0

這是一個常見的問題,不僅是javascript,而且還有很多種語言,問題在於二進制>非二進制轉換,並且無法在「我們的結尾」解決,而沒有截斷,您必須做一箇中斷。 – Dellirium

+6

這不像浮點運算的固有侷限性那麼嚴重。浮點值僅*近似*實數。 – chepner

+0

@chepner,我知道上面的問題(「浮點數學是否被破壞?」),因此我自己引用了它。如果你看到這個問題,你會發現它問道,我引用「任何想法爲什麼會發生這種情況?」,而我的問題從「是否有解決方案......」開始。因此,這應該被認爲是不重複的。我想討論解決這個問題的方法。 –

回答

5

「(無)」錯誤的「解決方案」是忽略它,並確保使用適當的函數,即toFixed(n)來顯示具有所需小數位數的數字。

知道一個值的內部表示,以及如何目前將該值與最終用戶之間的區別是很重要的。

+0

問題是當我的應用程序像數學密集型科學計算/會計/銀行/金融應用程序。該應用必須儘可能準確,並至少與計算器上顯示的值相匹配。因此這個問題是相關的。 –

+0

@ TempO'rary平均而言,四捨五入的「錯誤」將會平平。使用雙精度浮點的典型誤差與人類頭髮的寬度相比,與地球圍繞太陽的軌道相比。絕大多數問題都是微不足道的。要獲得「計算器精確度」,只要確保您不超過14位有效數字。 – Alnitak

+0

哦,出於會計目的,根本不使用FP,使用「十進制」類,或使「單位」值爲最小貨幣數量並使用整數,例如代表1美元爲「100」 – Alnitak

相關問題