taj*_*taj 1 java rounding scale bigdecimal
嗨使用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));
Run Code Online (Sandbox Code Playgroud)
来自文档
舍入模式向"最近邻居"舍入,除非两个邻居等距,在这种情况下,向着偶邻居舍入.如果丢弃的分数左边的数字是奇数,则表现为RoundingMode.HALF_UP; 如果它是偶数,则表现为RoundingMode.HALF_DOWN
如果是:
250335.625
Run Code Online (Sandbox Code Playgroud)
它是等距的.62,.63所以它使用左邻居2,even因此HALF_DOWN
如果是:
250335.6250294325406169060513303508358832
Run Code Online (Sandbox Code Playgroud)
它离它越来越近了.63.
如果你尝试,250335.615你将看到它是等距的.61,.62但左边的邻居1是odd如此HALF_UP.
给予 250335.62