BigDecimal中divide算法

BigDecimal a=new BigDecimal(“2322.47”);

BigDecimal b=stream.divide(new BigDecimal(209),2).setScale(4,BigDecimal.ROUND_HALF_UP);

System.out.println(b);

输出是11.12 是错误的

查看 divide源码
public BigDecimal divide(BigDecimal divisor, int roundingMode) {
return this.divide(divisor, scale, roundingMode);
}
所一传的2,并不是保留几位小数,二是以某种方式处理数据

public final static int ROUND_DOWN = 1;
public final static int ROUND_CEILING = 2;
public final static int ROUND_FLOOR = 3;
public final static int ROUND_HALF_UP = 4;
public final static int ROUND_HALF_DOWN = 5;
public final static int ROUND_HALF_EVEN = 6;
public final static int ROUND_UNNECESSARY = 7;

BigDecimal divide(BigDecimal divisor, int roundingMode)
这个方法到底是小数保留几位呢

BigDecimal b=new BigDecimal(“2322.47222”).divide(new BigDecimal(“209”),2);
输出:11.11231

BigDecimal b=new BigDecimal(“2322.47222”).divide(new BigDecimal(“209.123345456667”),2);
输出:11.10576

BigDecimal b=new BigDecimal(“2322.7896”).divide(new BigDecimal(“209.123345456667”),2);
输出:11.1073

BigDecimal b=new BigDecimal(“2322”).divide(new BigDecimal(“209.123345456667”),2);
输出:12
结论:使用 divide(BigDecimal divisor, int roundingMode)这个方法,小数保留几位依赖于分子的位数

两个数相除,保留两位小数(示例是四舍五入),正确写法:
new BigDecimal(“2322”).divide(new BigDecimal(“209.123345456667”),2, BigDecimal.ROUND_HALF_UP);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值