我有一个函数接收两个BigDecimal数字,说bd1和bd2作为参数 . 该函数应减去bd1 - db2并返回
bd1和bd2的比例都是2,结果也应该只有2的比例但是使用减法是缩小到完整的十进制表示我希望比例设置为2并尝试使用setScale,但是setScale正在考虑舍入模式并且不清楚哪个舍入模式用于获得限制为2的精确结果
需要获得具有2的精确减去值(bd1-bd2) . 在这种情况下,我需要15.04没有舍入,因为我从另一个应用程序获取这些值,我不想通过添加舍入模式更改值
BigDecimal bd1 = new BigDecimal(30.18);
BigDecimal bd2 = new BigDecimal(15.14);
BigDecimal diff = bd1.subtract(bd2);
System.out.println("bd1.subtract(bd2) " + diff);
System.out.println("RoundingMode.DOWN " + diff.setScale(2, RoundingMode.DOWN));
System.out.println("RoundingMode.FLOOR " + diff.setScale(2, RoundingMode.FLOOR));
System.out.println("RoundingMode.UP " +diff.setScale(2, RoundingMode.UP));
System.out.println("RoundingMode.CEILING " + diff.setScale(2, RoundingMode.CEILING));
System.out.println("RoundingMode.HALF_UP " + diff.setScale(2, RoundingMode.HALF_UP));
Result
------
bd1.subtract(bd2) 15.03999999999999914734871708787977695465087890625
RoundingMode.DOWN 15.03
RoundingMode.FLOOR 15.03
RoundingMode.UP 15.04
RoundingMode.CEILING 15.04
RoundingMode.HALF_UP 15.04
实际结果是15.04
1 回答
您正在使用
double
初始化BigDecimal
,因此它没有足够的精度 . 使用String
作为构造函数的参数: