Java中使用十进制格式进行舍入
让我们看一下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
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)