嗨,使用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));
最佳答案
从Documentation
舍入模式将舍入到“最近的邻居”,除非两个邻居都等距,在这种情况下,将舍入到偶数邻居。
如果舍弃分数左边的数字为奇数,则表现为RoundingMode.HALF_UP;甚至与RoundingMode.HALF_DOWN一样
如果是:
250335.625
它与
.62
和.63
等距,因此它使用的左邻居2
是even
,因此是HALF_DOWN
如果是:
250335.6250294325406169060513303508358832
它更靠近
.63
,所以它去了那里。如果尝试使用
250335.615
,您将看到它们与.61
和.62
等距,但是左邻居1
是odd
,因此它变为HALF_UP
。给予
250335.62
关于java - 大十进制转换问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29541717/