Java 意外的大十进制结果。1除以3得到1。不确定为什么

Java 意外的大十进制结果。1除以3得到1。不确定为什么,java,bigdecimal,rounding,Java,Bigdecimal,Rounding,可能重复: 我觉得我错过了一些明显的东西,但却无法弄清楚它是什么。我试图使用BigDecimal获取两个数字之间除法的小数部分。一个非常简单的例子,1.00除以3.00应该是0。(3)重复。但是,我一直得到1.00的结果 BigDecimal num=新的BigDecimal(1.00)。设置刻度(2); BigDecimal除数=新的BigDecimal(3.00)。设置刻度(2); num.divide(除数,BigDecimal.向上四舍五入); 系统输出打印(num); 我的结果是1

可能重复:

我觉得我错过了一些明显的东西,但却无法弄清楚它是什么。我试图使用
BigDecimal
获取两个数字之间除法的小数部分。一个非常简单的例子,1.00除以3.00应该是0。(3)重复。但是,我一直得到1.00的结果

BigDecimal num=新的BigDecimal(1.00)。设置刻度(2);
BigDecimal除数=新的BigDecimal(3.00)。设置刻度(2);
num.divide(除数,BigDecimal.向上四舍五入);
系统输出打印(num);

我的结果是1.00,我不知道为什么?

忽略了
num.divide
的结果。您需要将其设置回一个变量

    BigDecimal num = new BigDecimal(1.00).setScale(2);
    BigDecimal divisor = new BigDecimal(3.00).setScale(2);

    BigDecimal result = num.divide(divisor, BigDecimal.ROUND_HALF_UP);

    System.out.print(result);

这将打印
0.33
num.divide
不会更改
num
,而是返回结果

尝试:


大小数是不可变的。您需要将结果分配给变量。

+1您必须这样做,因为BigDecimal(以及它使用的BigInteger)是不可变的。啊,谢谢。尽管它是文档中的第一个单词,但我完全忽略了它。
num = num.divide(divisor, BigDecimal.ROUND_HALF_UP)