BigDecimal

因为double类型所定义的浮点数并不是精确的,比如在定义一个double类型a=1.0,b=0.9,a-b的结果并不会等于0.1而是0.9999999998

所以在进行浮点数的精确计算时,就不能用double或者float,而是BigDecimal

public class Demo04 {
    public static void main(String[] args) {
        double a = 1.0;
        double b = 0.9;
        
        System.out.println(a-b);//结果为0.099999999999998

        //BigDecimal,大的浮点数精确计算
        BigDecimal b1 = new BigDecimal("1.0");
        BigDecimal b2 = new BigDecimal("0.9");
        //减法
        BigDecimal r1 = b1.subtract(b2);
        System.out.println(r1);          //0.1

        //加法
        BigDecimal r2 = b1.add(b2);
        System.out.println(r2);          //1.9

        //乘法
        BigDecimal r3 = b1.multiply(b2);
        System.out.println(r3);          //0.98

        //除法,执行除法运算时,除不尽会报错
        BigDecimal r4 = new BigDecimal("1.4")
                .subtract(new BigDecimal("0.5"))
                .divide(new BigDecimal("0.9"));
        System.out.println(r4);          //1

        //除不尽时                                                                保留两位小数        四舍五入
        BigDecimal r5 = new BigDecimal("10").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);
        System.out.println(r5);          //3.33
    }
}

posted @ 2022-03-13 16:03  长空扯淡  阅读(68)  评论(0)    收藏  举报