注意:默认情况下,DecimalFormat四舍五入


如果按原样使用DecimalFormat,则可能无法四舍五入。
展开API

DecimalFormat

https://docs.oracle.com/javase/jp/8/docs/api/java/text/DecimalFormat.html

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

RoundingMode.HALF_EVEN

https://docs.oracle.com/javase/jp/8/docs/api/java/math/RoundingMode.html#HALF_EVEN

舍入模式将舍入到"最近的数字"(但是,如果两边的数字是等距的,则舍入到偶数的一面)。如果要舍弃的小数部分的左位数为奇数,则其作用类似于RoundingMode.HALF_UP,如果是偶数,则其作用类似于RoundingMode.HALF_DOWN。当在连续计算中重复应用时,此舍入模式从统计angular上使累积误差最小。这也称为"银行舍入",主要在美国使用。

因此,行为与以下舍入略有不同。
如果为0.5,则由于0在1和0之间是偶数,因此在这里看起来是四舍五入的;如果为1.5,则因为2在2和1之间是偶数,所以在这里是四舍五入的。

<表格>

输入

输出


<身体>

0.5

0

1.5

2


如果要确保四舍五入,可以指定RoundingMode.HALF_UP。

round.java

1
2
DecimalFormat df = new DecimalFormat();
df.setRoundingMode(RoundingMode.HALF_UP);