BigDecimal相关操作

我是小懒猴,人狠话不多,直接上才艺。

BigDecimal 相关操作-> 待补充

// 加

BigDecimal add = ma.add(mb);

System.out.println("加法:"+add);

// 减

BigDecimal sub = ma.subtract(mb);

System.out.println("减法:"+sub);

// 乘

BigDecimal mul = mb.multiply(md);

System.out.println("乘法:"+mul);

// 除

BigDecimal div = mb.divide(md);

System.out.println("除法:"+div);

mc = mc.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("四舍五入:"+mc);

mc = mc.negate();
System.out.println("负数:"+mc);

divide-四舍五入

public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode)
	第一个参数是除数,第二个参数代表保留几位小数,第三个代表的是使用的模式。、
BigDecimal.ROUND_DOWN:直接省略多余的小数,比如1.28如果保留1位小数,得到的就是1.2

BigDecimal.ROUND_UP:直接进位,比如1.21如果保留1位小数,得到的就是1.3

BigDecimal.ROUND_HALF_UP:四舍五入,2.35保留1位,变成2.4

BigDecimal.ROUND_HALF_DOWN:四舍五入,2.35保留1位,变成2.3

后边两种的区别就是如果保留的位数的后一位如果正好是5的时候,一个舍弃掉,一个进位。

例子:

BigDecimal magInterest = fusion.getRzAmt()
.multiply(fusion.getMagRate())
.multiply(new BigDecimal(days))
.divide(new BigDecimal("360"), 2, BigDecimal.ROUND_HALF_UP);

比较大小

BigDecimal b1 = new BigDecimal(0.1);
BigDecimal b2 = new BigDecimal(0.2);
int c = b1.compareTo(b2);  // -1

c=1表示b1大于b2
c=0表示b1等于b2
c=-1表示b1小于b2

判断只有五种情况
>0	 	a大于b	
<0	 	a小于b
=0		相等
>=0 	a大于等于b
<=0	a小于等于b

设置小数位数

BigDecimal bigDecimal1 = new BigDecimal(88.128);
bigDecimal1.setScale(2,BigDecimal.ROUND_DOWN); //截取前两位

//对数据进行四舍五入
BigDecimal.valueOf(1.234).setScale(2,BigDecimal.ROUND_HALF_DOWN)=1.23
BigDecimal.valueOf(1.235).setScale(2,BigDecimal.ROUND_HALF_DOWN)=1.23
BigDecimal.valueOf(1.236).setScale(2,BigDecimal.ROUND_HALF_DOWN)=1.24
BigDecimal.valueOf(1.234).setScale(2,BigDecimal.ROUND_HALF_UP)=1.23
BigDecimal.valueOf(1.235).setScale(2,BigDecimal.ROUND_HALF_UP)=1.24
BigDecimal.valueOf(1.236).setScale(2,BigDecimal.ROUND_HALF_UP)=1.24

//直接删除买方付息比例 多余小数位  88.128 ->88.12
shareBenRuleVo.setAddValTax(shareBenRuleVo.getAddValTax().setScale(2, BigDecimal.ROUND_DOWN));

判断传来是否为空

如果该字段可以为空 , 可以用null来判断。

//判断买方付息比例是否为0
buyerPayAddVo.getBuyerPay().stream().forEach(buyerPayAddVo1 -> {

    //判断是否为空
    if (buyerPayAddVo1.getPayInterestRatio() != null){

        //直接删除买方付息比例 多余小数位  88.128 ->88.12
        buyerPayAddVo1.setPayInterestRatio(buyerPayAddVo1.getPayInterestRatio().setScale(2,BigDecimal.ROUND_DOWN));

        //买方付息比例    <0
        if (buyerPayAddVo1.getPayInterestRatio().compareTo(new BigDecimal(0)) <0 ){
            throw new BusinessException("买方付息比例payInterestRatio买方付息比例必须大于或等于0");
        }
        //买方付息比例    >100
        if (buyerPayAddVo1.getPayInterestRatio().compareTo(new BigDecimal(100)) > 0){
            throw new BusinessException("买方付息比例payInterestRatio买方付息比例必须小于或等于100");
        }

    }

DecimalFormat

BigDecimal bigDecimal = new BigDecimal("123.11");
DecimalFormat decimalFormat = new DecimalFormat("#.00");
System.out.println(decimalFormat.format(bigDecimal));

BigDecimal bigDecimal1 = new BigDecimal("123");
DecimalFormat decimalFormat1 = new DecimalFormat("#.00");
System.out.println(decimalFormat.format(bigDecimal1));

0 没有则补0

DecimalFormat df = new DecimalFormat("0.00");
如果小数点前为0则为0 ;结果为0.00

总和

String loanAmt = strings.stream().map(y -> y.getAmount())
.reduce(BigDecimal.ZERO, BigDecimal::add) + "";

求和

BigDecimal sign = res.stream().filter((b) -> Arrays.asList("02", "04")
.contains(b.getSxStatus())).map(TSxInfo::getReceiveAmt)
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);

判断字段为null ,并且设置默认值为0


ArrayList<tec> tecs = new ArrayList<>();
tec tec = new tec();
tec.setAmt(null);

tec tec1 = new tec();
tec1.setAmt(null);

tecs.add(tec);
tecs.add(tec1);

System.out.println(tecs.stream().filter(x -> x.getAmt() != null).map(class01.tec::getAmt).reduce(BigDecimal::add).orElse(new BigDecimal(0)));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zcy_code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值