2012-06-22 72 views
2

我有一個有趣的白癡問題: 爲什麼javascript顯示10.2 - 17 = -6.800000000000001javascript add operation return bad result

在此處找到類似的內容:Calculate a minus operation in javascript returns a incorrect value但我無法將數字舍入。

我可以以某種方式解決這個問題,但沒有指定使用多少小數? (我實際上有一些結果可以有6-7小數)

+0

這可能是有益的http://blog.thatscaptaintoyou.com/introducing-big-js-arbitrary-precision-math-for-javascript/ – Ben

+0

的重複[?是JavaScript的數學破(HTTP:// stackoverflow.com/questions/588004/is-javascripts-math-broken)(和[other](http://stackoverflow.com/questions/1458633/elegant-workaround-for-javascript-floating-point-number-problem? LQ = 1)或多個)。周圍有一些庫可以提供幫助,例如[BigDecimal](https://github.com/dtrebbien/BigDecimal.js)和[BigNumber](http://jsfromhell.com/classes/bignumber)。 – nnnnnn

回答

5

浮點運算並不總是精確的。

特別是沒有10.2的精確表示作爲浮點值,所以最接近的可表示值被存儲。這個值將與10.2略有不同。

處理它的最簡單方法是在顯示數字時將數字四捨五入到一定的小數位數。

某些語言的decimal類型可以完全代表10.2。然而:

  • JavaScript沒有內置類型,所以你必須使用第三方庫。
  • 十進制浮點數不能解決所有問題。例如,0.1/0.3的結果不能完全表示爲小數。當您顯示結果時,您可能仍然需要將結果舍入到一定的小數位數。
+0

因此,不幸的是,我需要在進行操作之前進行檢查,以查看結果小數的數目,然後舍入數字。這種糟透了。 – zozo

+0

你究竟在做什麼10^-15ish錯誤很重要? – phenomnomnominal