BigDecimal转换


代码检测爆出 代码质量:使用浮点数进行精确计算
在这里插入图片描述
简单说就是不能用doule,不精确,要用BigDecimal
BigDecimal是一个对象,它的加减乘除等都跟数字类型不一样,以下就是它的一些常用方法

new一个BigDecimal

BigDecimal num1=new BigDecimal("0.12");

输出结果
在这里插入图片描述

add():相当于加

a.add(b)相当于a+b

		BigDecimal num=new BigDecimal("123.22");
		BigDecimal num1=new BigDecimal("0.12");
		System.out.println(num1.add(num));

sub():相当于减

a.subtract(b)相当于a-b

		BigDecimal a=new BigDecimal("123.22");
		BigDecimal b=new BigDecimal("0.12");
		System.out.println(a.subtract(b));

multiply():相当于乘

a.multiply(b)相当于乘

		BigDecimal a=new BigDecimal("5.22");
		BigDecimal b=new BigDecimal("3.12");
		System.out.println(a.multiply(b));

divide()相当于除

a.divide(b)相当于除,需要注意的是,如果除不尽,就会报错

		BigDecimal a=new BigDecimal("16.00");
		BigDecimal b=new BigDecimal("4.00");
		System.out.println(a.divide(b));

java.lang.ArithmeticException

不整除的话会报错,通过指定小数位数和四舍五入规则解决。
传入第二个参数,指定小数位个数,并传入第三个参数,指定四舍五入规则。

		BigDecimal a=new BigDecimal("17");
		BigDecimal b=new BigDecimal("8.30");
		System.out.println(a.divide(b,2,BigDecimal.ROUND_HALF_UP));

compareTo()比较大小

通过BigDecimal的compareTo方法来进行比较。返回的结果是int类型,-1表示小于,0是等于,1是大于。

if(a.compareTo(b) == -1){
    System.out.println("a小于b");
}
 
if(a.compareTo(b) == 0){
    System.out.println("a等于b");
}
 
if(a.compareTo(b) == 1){
    System.out.println("a大于b");
}
 
if(a.compareTo(b) > -1){
    System.out.println("a大于等于b");
}
 
if(a.compareTo(b) < 1){
    System.out.println("a小于等于b");
}

Double和BigDecimal互相转换

double转BigDecimal

  • new BigDecimal(double val):-------------------不推荐
    会有一个精度的问题,如下:
    假如传进去的是2.5,它的值
  • 使用BigDecimal的静态方法:-------------------推荐
BigDecimal decimalD=BigDecimal.valueOf(a);

在这里插入图片描述

  • 使用Double.toString,-------------------推荐
BigDecimal decimalC=new BigDecimal(Double.toString(a));

在这里插入图片描述

BigDecimal转double

doubleValue

		BigDecimal a=new BigDecimal("23.556");	
		Double b=a.doubleValue();

Float和BigDecimal互相转换

Float转BigDecimal

  • 先用toString,再传入BigDecimal,不损失精度 ----------推荐
		float a=545.56f;
		System.out.println(new BigDecimal(Float.toString(a)));

在这里插入图片描述

  • 用BigDecimal.valueOf,损失精度 --------------------不推荐
		float a=545.56f;
		System.out.println(BigDecimal.valueOf(a));

在这里插入图片描述

BigDecimal转Float

使用floatValue

		BigDecimal a=new BigDecimal(50);
		System.out.println(a.floatValue());

int和BigDecimal互相转换

int转BigDecimal

        int b = 5;
        BigDecimal a = new BigDecimal(b);

BigDecimal转int

            BigDecimal b = new BigDecimal(12);
            int c = b.intValue();

Long和BigDecimal互相转换

long转BigDecimal

        long b = 5;
        BigDecimal a = new BigDecimal(b);

BigDecimal转Long

longValue会损失精度,四舍五入取整,可以用doubleValue代替

 BigDecimal b = new BigDecimal(12);
        Long c = b.longValue();

判断BigDecimal是否为0

BigDecimal值的判断用equals

不能用常规的==0判断,因为它是对象,用equals判断,它首先要判断scale,也就是BigDecimal的小数位数,不但小数前的值得一样,就连位数和小数点后的值必须也一样,如下,10和10.0是false,所以equals也不能用
在这里插入图片描述

判断是否为0

使用Bigdecimal.ZERO,true为真,false为假
Bigdecimal.ZERO

a.compareTo(BigDecimal.ZERO)==0

两位小数

BigDecimal price = new BigDecimal("5.5564").setScale(2,BigDecimal.ROUND_HALF_UP);//保留两位小数四舍五入5.56;

object转bigdecimal工具类

该工具类来源https://blog.csdn.net/jerrygaoling/article/details/112991645

	/**
     * Object转BigDecimal类型
     *
     * @param value 传入Object值
     * @return 转成的BigDecimal类型数据
     */
    public static BigDecimal ToBigDecimal(Object value) {
        BigDecimal bigDec = null;
        if (value != null) {
            if (value instanceof BigDecimal) {
            	bigDec = (BigDecimal) value;
            } else if (value instanceof String) {
            	bigDec = new BigDecimal((String) value);
            } else if (value instanceof BigInteger) {
            	bigDec = new BigDecimal((BigInteger) value);
            } else if (value instanceof Number) {
            	bigDec = new BigDecimal(((Number) value).doubleValue());
            } else {
                throw new ClassCastException("Can Not make [" + value + "] into a BigDecimal.");
            }
        }
        return bigDec;
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值