避免Java 中浮點數和雙精度數的浮點精度錯誤
Java 中涉及浮點數(浮點數和雙精度數)的運算可能會導致精度誤差。出現這些錯誤的原因是浮點數和雙精度數以二進位形式表示數字,它不能提供所有十進制值的精確表示。
請考慮以下程式碼:
for (float value = 0.0f; value < 1.0f; value += 0.1f) System.out.println(value);
而不是預期值,輸出顯示0.1 的增量,並有輕微的錯誤累積:
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.70000005 0.8000001 0.9000001
解決精確度錯誤
要避免此問題,請考慮以下方法:
BigDecimal step = new BigDecimal("0.1"); for (BigDecimal value = BigDecimal.ZERO; value.compareTo(BigDecimal.ONE) < 0; value = value.add(step)) { System.out.println(value); }
此程式碼將準確表示值並將數值增加 0.1,避免精確度誤差的累積。
以上是如何避免 Java 中的浮點精度錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!