Java中使用十进制格式进行舍入

Java中使用十进制格式进行舍入,java,decimalformat,Java,Decimalformat,让我们看一下Java中的以下语句 System.out.println(new DecimalFormat("0").format(2.4)); //returns 2 System.out.println(new DecimalFormat("0").format(2.5)); //returns 2 <---Concentrate here System.out.println(Math.round(2.5)); //returns 3 Sy

让我们看一下Java中的以下语句

System.out.println(new DecimalFormat("0").format(2.4)); //returns 2

System.out.println(new DecimalFormat("0").format(2.5)); //returns 2  <---Concentrate here
System.out.println(Math.round(2.5));                    //returns 3

System.out.println(new DecimalFormat("0").format(2.6)); //returns 3
System.out.println(new DecimalFormat("0").format(3.5)); //returns 4

它应该返回
3
,但它返回
2
。怎么做?

这是故意的行为。发件人:

四舍五入

十进制格式使用半偶数舍入(请参见舍入半偶数)进行格式设置

关于:

舍入模式:向“最近的邻居”舍入,除非两个邻居距离相等,在这种情况下,向偶数邻居舍入。如果被丢弃分数左边的数字是奇数,则其行为与向上取整相同;如果是偶数,则表现为向下舍入半舍。请注意,这是一种舍入模式,当在一系列计算中重复应用时,可将累积误差降至最低

这也被称为银行家四舍五入

另一方面,使用以下公式,即“正常”舍入:

(long)Math.floor(a + 0.5d)

DecimalFormat
的默认舍入模式为
RoundingMode.HALF_偶数
。这意味着它向上舍入,或者如果数字更接近下一个邻居,则向下舍入。当数字正好位于两个相邻数字之间(在您的示例中为2和3)时,它将四舍五入到最近的偶数(在您的示例中为2)

正如你所看到的,当你尝试使用3.5时,它四舍五入为4

如果您想要更“直观”的行为,请调用
setRoundingMode(RoundingMode.HALF\u UP)

这与
HALF_偶数
相同,但如果数字正好位于两个相邻的数字之间,则将始终向上舍入

(long)Math.floor(a + 0.5d)