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)