5
A
回答
10
一個很好的解釋可以在這裏找到。 http://www.ibm.com/developerworks/java/library/j-jtp0114/
浮點算術很少精確。雖然某些數字(如0.5)可以精確地表示爲二進制(基數2)小數(因爲 0.5等於2-1),但其他數字(如0.1)不能。因此,浮點運算可能會導致舍入錯誤,產生的結果接近 - 但不等於 - 您可能預期的結果 。例如,下面的結果簡單的計算在 2.600000000000001,而不是2.6:
double s=0; for (int i=0; i<26; i++) s += 0.1; System.out.println(s);
類似地,乘以0.1 * 26產生從的 加入0.1到自身的26倍的不同的結果。當從浮點數轉換爲整數時舍入錯誤變得更加嚴重 ,因爲轉換爲 整數類型會丟棄非整數部分,即使計算 「看起來像」它們應該具有整數值。例如, 以下語句:
double d = 29.0 * 0.01; System.out.println(d); System.out.println((int) (d * 100));
會產生作爲輸出:
0.29 28
這可能不是你可能期望首先什麼。
有關更多信息,請參閱提供的參考。
1
1
舍入誤差在浮點
同樣的方式,3 * 0.1 != 0.3
1
自動型的推廣正在發生的事情(當它不是由編譯器至少摺疊),這就是結果。
這是一些學習資源。
http://docs.oracle.com/javase/specs/jls/se5.0/html/conversions.html
下一步將是要學會用格式化進行格式化給定精度/要求。
2
正如其他人所提到的,如果您希望得到精確的十進制值,例如double
,則不能指望double
。實施貨幣應用時。你應該做的是要仔細看看BigDecimal:
BigDecimal a = new BigDecimal("3.1");
BigDecimal b = new BigDecimal("7.1");
BigDecimal result = a.subtract(b);
System.out.println(result); // Prints -4.0
相關問題
- 1. Java套接字故障
- 2. Java接口故障
- 3. Java Android CountDownTimer故障
- 4. 字符串故障
- 5. 的Hadoop - 故障中恢復僅減少
- 6. Windows故障排除凍結和減速
- 7. TestNG故障不是故障
- 8. Jquery&Joomla無故障故障
- 9. 故障排除_mkdir故障
- 10. WCF故障 - 哪種故障?
- 11. JavaScript故障排除故障
- 12. Java Swing圖形故障?
- 13. BufferedReader故障排除Java
- 14. Java Eclipse加密故障
- 15. Java Swing JScrollPane行號故障
- 16. Java,反編譯器故障
- 17. Java文件I/O故障
- 18. Java邏輯陣列故障
- 19. Java編程中的函數故障
- 20. 故障與(函數(){})()
- 21. Islower函數故障
- 22. FPS計數故障
- 23. Javascript:函數故障
- 24. Chrome Array.sorting數字出現故障
- 25. C#XNA:字典故障
- 26. 字符編碼故障
- 27. 字符串/分段故障
- 28. C:字符串故障
- 29. iRuntimeExceptions被認爲是故障或故障?
- 30. 什麼是故障 - 段故障,即...?
浮點算術是怎麼回事。 –
查看[this](http://stackoverflow.com/questions/2798830/double-precision-values)和其他許多人的內容。 (嘿,WECSSKAFPN文章去哪了?) –
這已經是最常見的編程問題了。 .... –