嗨,使用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等距,因此它使用的左邻居2even,因此是HALF_DOWN

如果是:

250335.6250294325406169060513303508358832


它更靠近.63,所以它去了那里。

如果尝试使用250335.615,您将看到它们与.61.62等距,但是左邻居1odd,因此它变为HALF_UP

给予250335.62

关于java - 大十进制转换问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29541717/

10-10 02:01