Java 大十进制转换问题

Java 大十进制转换问题,java,scale,bigdecimal,rounding,Java,Scale,Bigdecimal,Rounding,您好,使用半舍五入(银行舍五入)似乎java中的舍入没有按预期工作。以下两种打印的输出应与250335.62相同,但第二种打印的输出应为250335.63。 请建议 System.out.println(new BigDecimal("250335.625").setScale(2, RoundingMode.HALF_EVEN)); System.out.println(new BigDecimal("250335.6250294325406169060513303508358832").se

您好,使用半舍五入(银行舍五入)似乎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));

RoundingMode.半偶数
舍入到最近的邻居-当你有
0.62502
时,数字更接近
0.63
而不是
0.62
。只有当差值相同时,它才会四舍五入为偶数-小数部分以5结尾。

四舍五入模式。半偶数
四舍五入到最近的邻居-当你有
0.62502
时,数字更接近
0.63
而不是
0.62
。只有当差值相同时,它才会四舍五入为偶数-小数部分以5结尾。

舍入模式:向“最近的邻居”舍入,除非两个邻居距离相等,在这种情况下,向偶数邻居舍入。 行为与RoundingMode.HALF_UP相同,如果丢弃分数左侧的数字为奇数;与RoundingMode的行为相同。如果为偶数,则向下半个

在下列情况下:

250335.625
250335.6250294325406169060513303508358832
它与
.62
.63
等距,因此它使用左邻域
2
,它是
偶数
,因此是
下半部分

在下列情况下:

250335.625
250335.6250294325406169060513303508358832
它更接近于
.63
,所以它就到了那里

如果您尝试使用
250335.615
,您将看到它与
.61
.62
的距离相等,但左邻域
1
奇数
,因此它向上移动了
一半

舍入模式:向“最近的邻居”舍入,除非两个邻居距离相等,在这种情况下,向偶数邻居舍入。 行为与RoundingMode.HALF_UP相同,如果丢弃分数左侧的数字为奇数;与RoundingMode的行为相同。如果为偶数,则向下半个

在下列情况下:

250335.625
250335.6250294325406169060513303508358832
它与
.62
.63
等距,因此它使用左邻域
2
,它是
偶数
,因此是
下半部分

在下列情况下:

250335.625
250335.6250294325406169060513303508358832
它更接近于
.63
,所以它就到了那里

如果您尝试使用
250335.615
,您将看到它与
.61
.62
的距离相等,但左邻域
1
奇数
,因此它向上移动了
一半


给出
250335.62

为什么你希望第二个给你
250335.62
?.6250294。。。应该“四舍五入”,毕竟它比.62更接近.63。为什么你希望第二个会给你
250335.62
?.6250294。。。应该是“四舍五入”,毕竟它更接近.63而不是.62。