您正在使用HALF_EVEN舍入(银行四舍五入)似乎Java中的四舍五入没有按预期工作。以下打印件应提供与250335.62相同的输出,但第二次打印输出为250335.63。 请建议
System.out.println(new BigDecimal("250335.625").setScale(2, RoundingMode.HALF_EVEN));
System.out.println(new BigDecimal("250335.6250294325406169060513303508358832").setScale(2, RoundingMode.HALF_EVEN));
答案 0 :(得分:6)
舍入模式向“最近邻居”舍入,除非两个邻居都是等距的,在这种情况下,向着偶邻居舍入。 如果丢弃的分数左边的数字是奇数,则表现为RoundingMode.HALF_UP;如果它是偶数
,则表现为RoundingMode.HALF_DOWN
以下情况:
250335.625
它与.62
和.63
等距,因此它使用的是2
的左邻居even
因此HALF_DOWN
以下情况:
250335.6250294325406169060513303508358832
它离.63
更近,所以它去了那里。
如果您尝试使用250335.615
,您会看到它与.61
和.62
等距,但左邻居1
为odd
所以它会{ {1}}。
给予HALF_UP
答案 1 :(得分:4)
RoundingMode.HALF_EVEN
围绕最近邻居 - 当您0.62502
时,该数字更接近0.63
而非0.62
。只有当差异相同时,它才会舍入到偶数 - 小数部分以5结尾。