BigDecimal 类

文章介绍了Java中BigDecimal类的作用,由于double和float类型在计算时可能出现误差,因此在需要精确计算时使用BigDecimal。文章详细讲解了BigDecimal的add()、subtract()、multiply()和divide()方法,并通过代码示例展示了如何进行加减乘除操作,特别提到了divide()方法在处理除不尽的情况时需要注意的四舍五入策略。
摘要由CSDN通过智能技术生成

BigDecimal 类

一、为什么需要BigDecimal类

先看代码

public class Test {
    public static void main(String[] args) {
        double num1 = 1.0;
        double num2 = 0.9;
        System.out.println(num1-num2);
    }
}

运行结果

0.09999999999999998

原因:double和float在内存中存的是近似值,经过一系列运算后,结果会出现误差。需要高精度时,引入BigDecimal类。

二、使用

BigDecimal bd = new BigDecimal("1.0");

三、BigDecimal类中的几个方法

1.add()加法

public BigDecimal add(BigDecimal augend)
功能:两个BigDecimal类型相加。
代码示例

        BigDecimal bd = new BigDecimal("1.0");
        BigDecimal bd1 = new BigDecimal("0.9");
        BigDecimal end = bd.add(bd1);
        System.out.println("bd + bd1 =\t"+end); 
//运行结果
bd + bd1 =	1.9

2.subtract()减法

public BigDecimal subtract(BigDecimal subtrahend)
功能:两个BigDecimal类型相减。
代码示例

        BigDecimal bd = new BigDecimal("1.0");
        BigDecimal bd1 = new BigDecimal("0.9");
        BigDecimal end = bd.subtract(bd1);
        System.out.println("bd + bd1 =\t"+end); 
//运行结果
bd - bd1 =	0.1

3. multiply()乘法

public BigDecimal multiply(BigDecimal multiplicand)
功能:两个BigDecimal类型相乘。
代码示例

        BigDecimal bd = new BigDecimal("1.0");
        BigDecimal bd1 = new BigDecimal("0.9");
        BigDecimal end = bd.multiply(bd1);
        System.out.println("bd * bd1 =\t"+end); 
//运行结果
bd * bd1 =	0.90

4. divide()除法

public BigDecimal divide(BigDecimal divisor)
public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)//参数scale为精确小数点后几位,
mode指小数的取舍模式,一般四舍五入,为BigDecimal.ROUND_HALF_UP
功能:两个BigDecimal类型相除。
注意:如果两数不能整除,则会报ArithmeticException异常,需要进行 保留小数 四舍五入。参数mode
代码示例

        BigDecimal bd2 = new BigDecimal("1.0");
        BigDecimal bd3 = new BigDecimal("1.0");
        end = bd2.divide(bd3);
        System.out.println("bd2 / bd3 =\t"+end);

        // 保留小数2位数 四舍五入 
        BigDecimal bd = new BigDecimal("1.0");
        BigDecimal bd1 = new BigDecimal("0.9");
        BigDecimal end = bd.end = bd.divide(bd1,2,BigDecimal.ROUND_HALF_UP);
        System.out.println("bd2 / bd3 =\t"+end);
//运行结果
bd2 / bd3 =	1
bd2 / bd3 =	1.11

四、代码汇总

import java.math.BigDecimal;

public class Test {
    public static void main(String[] args) {
        double num1 = 1.0;
        double num2 = 0.9;
        System.out.println(num1-num2);
        BigDecimal bd = new BigDecimal("1.0");
        BigDecimal bd1 = new BigDecimal("0.9");
        BigDecimal end = bd.add(bd1);
        System.out.println("bd + bd1 =\t"+end);

        end = bd.subtract(bd1);
        System.out.println("bd - bd1 =\t"+end);

        end = bd.multiply(bd1);
        System.out.println("bd * bd1 =\t"+end);

        BigDecimal bd2 = new BigDecimal("1.0");
        BigDecimal bd3 = new BigDecimal("1.0");
        end = bd2.divide(bd3);
        System.out.println("bd2 / bd3 =\t"+end);//ArithmeticException

        end = bd.divide(bd1,2,BigDecimal.ROUND_HALF_UP);
        System.out.println("bd2 / bd3 =\t"+end);
    }
}

运行结果

0.09999999999999998
bd + bd1 =	1.9
bd - bd1 =	0.1
bd * bd1 =	0.90
bd2 / bd3 =	1
bd2 / bd3 =	1.11

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值