Java DecimalFormat舍入错误?

时间:2015-02-06 23:30:37

标签: 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.25和0.5时为0.3)?

1 个答案:

答案 0 :(得分:4)

Javadoc声明:

  

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

HALF_EVEN正是你所注意到的:当它恰好位于两个数字之间时,它更喜欢四舍五入到最近的偶数。 (这有很多原因,主要是因为它不会平均向上或向下偏差,倾向于平衡舍入错误。)

只需针对您描述的行为致电setRoundingMode(RoundingMode.HALF_UP)