Java BigDecimal和MathContext
有人能解释为什么这两种结果不同吗Java BigDecimal和MathContext,java,Java,有人能解释为什么这两种结果不同吗 BigDecimal bd1 = new BigDecimal(1234.5678) .divide( new BigDecimal(1.19), 4, RoundingMode.CEILING ); BigDecimal bd2 = new BigDecimal(1234.5678) .divide( new BigDecimal(1.19), new Ma
BigDecimal bd1 = new BigDecimal(1234.5678)
.divide(
new BigDecimal(1.19),
4,
RoundingMode.CEILING
);
BigDecimal bd2 = new BigDecimal(1234.5678)
.divide(
new BigDecimal(1.19),
new MathContext(4, RoundingMode.CEILING)
);
结果:
bd1: 1037.4520
bd2: 1038
因为在
MathContext(4,RoundingMode.天花)
中,4是精度,但在中是除法(新的BigDecimal(1.19),4,RoundingMode.天花)代码>,4为刻度。您可以看到“精度”和“比例”之间的差异
有一个重要的要点被提到,但没有直接提到,那就是
“精度”和“比例”之间的差异及其使用方法
在这两个声明中。“精度”“是有效数据的总数
数字中的数字。“比例”是数字右边的位数
小数点
所以如果你把第二个换成
final BigDecimal bd2 = new BigDecimal(1234.5678)
.divide(
new BigDecimal(1.19),
new MathContext(8, RoundingMode.CEILING)
);
您得到了相同的结果:
1037.4520
1037.4520
我认为我为你准备的MCVE说明了问题?你让例子变得更糟了。如果可以避免,请不要对BigDecimal构造函数使用双文本。浮点精度使示例不那么清晰1234.5678
将不会1234.5678
@Michael这才是重点。我的真实例子是类似的。我有类似2074523.35687的东西作为输入,然后使用字符串