2015-02-06 65 views
-1

似乎與DecimalFormat輪數的方式有些不一致。Java DecimalFormat舍入錯誤?

new DecimalFormat("0.0", new DecimalFormatSymbols(Locale.US)).format(number)

這裏是什麼返回一些不同number值。

  • 0.05回報0.0
  • 0.15 0.2返回
  • 0.25 0.2返回
  • 0.35 0.4返回
  • 0.45 0.4返回

爲什麼發生這種情況?更重要的是,我怎樣才能得到正確的數值(0.3時0.25和0.5取整時0.45)?

+0

2 downvotes詢問計算器上的一個問題。酷 – Michael 2015-02-09 04:41:43

回答

3

的Javadoc狀態:

DecimalFormat的提供的RoundingMode定義用於格式化舍入模式。默認情況下,它使用RoundingMode.HALF_EVEN。

HALF_EVEN完全符合您的注意事項:當它恰好在兩個數字之間的中間位置時,它傾向於舍入到最接近的偶數。 (這很有用,原因很多,主要是因爲它平均偏差不大,趨於平衡舍入誤差。)

只需致電setRoundingMode(RoundingMode.HALF_UP)查看您描述的行爲。

+0

好的答案,在不到2分鐘:) – 2015-02-06 23:33:19