Java DecimalFormat 舍入错误?

Java DecimalFormat rounding error?

DecimalFormat 舍入数字的方式似乎有些不一致。

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

这是一些不同 number 值的返回值。

为什么会这样?更重要的是,如何获得正确的值(0.25 舍入时为 0.3,0.45 舍入时为 0.5)?

Javadoc 指出:

DecimalFormat provides rounding modes defined in RoundingMode for formatting. By default, it uses RoundingMode.HALF_EVEN.

HALF_EVEN 的作用与您注意到的完全相同:当它刚好位于两个数字的中间时,它更喜欢四舍五入到最接近的偶数。 (出于多种原因,这很有用,主要是因为它不会平均偏高或偏低,倾向于平衡舍入误差。)

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