在Java中,我注意到1.1+(2.2*(3.3+4.4))
結果爲18.040000000000003
,而不是18.04
。有沒有辦法來防止這種情況發生?Java中的雙精度浮點型
回答
這是使用浮點運算的結果,你有兩個選擇:
Math.round
該操作的結果,但我想這不是你想要的。- 使用
java.math.BigDecimal
(任意精度小數),允許您存儲那些小數點而不會損失精度。
工作得很好:)顯然,我可以' t接受,所以這即將到來(預計在1小時左右!) – HyperNeutrino
這是一個精度問題,而不是一個舍入問題 – ControlAltDel
它不是定點算術 - 它使用雙精度浮點。 –
如果您的目標需要精確計算並完全控制精度,那麼我會建議使用BigDecimal
類。 BigDecimal允許用戶設置非常精確的規則,通過設置分割點後的數位數,舍入模式以及接受MathContext作爲參數來完成計算。
然而存在一些缺點。首先,BigDecimal
是對象,因此所有的操作都是通過方法完成的,而不是使用標準的數學運算符。這有點麻煩,尤其是在構建更復雜的表達時,如果不仔細做,可能會導致一些令人討厭的不潔代碼。其次,正如所說的,所有的操作都是在物體上完成的,它們在資源方面更爲重要。
- 1. 雙精度和單精度浮點數?
- 2. 爪哇 - 雙精度浮點
- 3. 專門爲雙精度和浮點精度的java類
- 4. 雙精度浮點數和其他浮點數精度
- 5. c中的浮點數和雙精度#
- 6. 雙精度浮點值傳遞雙精度時
- 7. 將1234567.1234的雙精度值轉換爲java中的浮點數
- 8. 雙精度和浮點的含義?
- 9. 更改浮點型精度
- 10. 浮點和雙精度恆定比較
- 11. 將雙精度轉換爲浮點數
- 12. Objective-C浮點數/雙精度
- 13. 標準雙精度IEEE浮點數有多少位的精度?
- 14. 單精度大端浮點值到Python浮點數(雙精度,大端)
- 15. 雙精度浮點數如何轉換爲單精度浮點格式?
- 16. 無法在Scala中寫入雙精度浮點和雙精度浮點數的方法
- 17. 浮點精度
- 18. 浮點數/雙精度浮點數的小範圍,適用於整型(C++,VS2010)
- 19. 雙精度10點精度
- 20. Java - 將默認浮點常量類型從雙精度型更改爲浮點型
- 21. java中雙精度乘法的精度?
- 22. 作爲兩個雙打總和的雙雙精度浮點數
- 23. 是否有可能以保真度將浮點雙精度浮點雙精度到兩個十進制整數?
- 24. python中的浮點精度
- 25. 浮法arithemtic和雙精度?
- 26. Java的雙精度
- 27. 雙精度浮標的雙精度數字
- 28. java-IBM-IEEE雙精度浮點字節轉換
- 29. opencv:將標量轉換爲浮點或雙精度類型
- 30. 如何驗證文本框(雙精度浮點型)
使用'BigDecimal'類。 – brso05
爲什麼這不完全出來,請參閱[爲什麼不使用Double或Float來表示貨幣?](http://stackoverflow.com/q/3730019/217324) –