Java DecimalFormat舍入错误?

Mic*_*ael 1 java decimalformat

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.25时为0.3,四舍五入为0.45时为0.5)?

Lou*_*man 5

Javadoc指出:

DecimalFormat提供在RoundingMode中定义的舍入模式以进行格式化。默认情况下,它使用RoundingMode.HALF_EVEN。

HALF_EVEN完全符合您的注意:当它恰好位于两个数字之间的一半时,它更喜欢四舍五入到最接近的偶数。(由于多种原因,这很有用,主要是因为它不会平均偏上或偏下,从而趋于平衡舍入误差。)

只需呼吁setRoundingMode(RoundingMode.HALF_UP)您描述的行为。