Java常用类:BigDecimal类


思考什么是BigDecimal类

以下程序结果什么?

package com.ibelifly.commonclass.bigdecimal;

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

按照惯有逻辑,我们认为程序输出结果应为0.1,但其实不是,输出结果如下:

image-20210828180236628

为什么?

因为doublefloat类型都以数字的近似值存储,比如我们想要存储double类型的数据1.0,那么在内存中实际存储并不是1.0,而是0.9999999。将近似值代入运算,结果就会出现像上面那样的误差。

在日常生活中,像这样的数值误差可以忽略,但在很多实际应用中(比如在银行)需要精确运算,而double以近似值存储的方式不再符合要求,这时就需要借助BigDecimal类。

概述

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。

创建方式

BigDecimal bd = new BigDecimal("1.0");

成员方法

public BigDecimal add(BigDecimal value); //加法
public BigDecimal subtract(BigDecimal value); //减法
public BigDecimal multiply(BigDecimal value); //乘法
public BigDecimal divide(BigDecimal value,int scale,RoundingMode mode); //除法

注意:在除法中,参数scale表示保留的小数位数,参数mode表示指定小数位数的取舍模式,通常采用四舍五入的模式,mode取值为BigDecimal.ROUND_HALF_UP表示用四舍五入的方法保留小数位数。

举例

package com.ibelifly.commonclass.bigdecimal;

import java.math.BigDecimal;

public class Test {
    
    
    public static void main(String[] args) {
    
    
        BigDecimal bd1=new BigDecimal("1.0");
        BigDecimal bd2=new BigDecimal("0.9");
        System.out.println(bd1.add(bd2)); //加法
        System.out.println(bd1.subtract(bd2)); //减法
        System.out.println(bd1.multiply(bd2)); //乘法
        System.out.println(bd1.divide(bd2,2,BigDecimal.ROUND_HALF_UP)); //除法
    }
}

image-20210828183203456


参考视频:https://www.bilibili.com/video/BV1vt4y197nY?p=27

参考文章:https://baike.baidu.com/item/BigDecimal/5131707?fr=aladdin

猜你喜欢

转载自blog.csdn.net/weixin_45605541/article/details/119971642