谈谈java中的BigDecimal

BigDecimal

位置:java.math包中。
作用:精确计算浮点数。
创建方式:BigDecimal bd=new BigDecimal(“1.0”);
产生背景:

public class TestBigDecimal {
    
    
    public static void main(String[] args) {
    
    
        double b1=1.0;
        double b2=0.9;
        System.out.println(b1-b2);
    }
}

运行结果:0.09999999999999998

普通方法不能精确计算浮点数。

使用BigDecimal
实例:

import java.math.BigDecimal;

public class TestBigDecimal {
    
    
    public static void main(String[] args) {
    
    
        BigDecimal bg1=new BigDecimal("2.2");
        BigDecimal bg2=new BigDecimal("1.2");

        BigDecimal result1=bg1.add(bg2);  //加法: bg1+bg2
        System.out.println(result1);

        BigDecimal result2=bg1.subtract(bg2);  //减法:bg1-bg2
        System.out.println(result2);

        BigDecimal result3=bg1.divide(bg2,3,BigDecimal.ROUND_HALF_UP);  // 除法:bg1/bg2    注意:加上保留几位小数
        System.out.println(result3);

        BigDecimal result4=bg1.multiply(bg2);  //乘法:bg1*bg2
        System.out.println(result4);
    }
}

运行结果:

3.4
1.0
1.833
2.64

关于BigDecimal中除法的的注意事项

  • 方法divide(BigDecimal bd, int scale, RoundingMode mode)
  • 返回BigDecimal其值为(this /
    divisor),其小数位数已指定。如果必须执行舍入操作以生成具有指定比例的结果,则将应用指定的舍入模式。

参数:

  • divisor- BigDecimal将其除以的值。
  • scale- BigDecimal要返回的商的比例。
  • roundingMode -应用舍入模式。

返回值:
this / divisor

抛出:
ArithmeticException-如果divisor为零, roundingMode==ROUND_UNNECESSARY并且指定的小数位数不足以准确表示除法的结果。
IllegalArgumentException-如果roundingMode不代表有效的舍入模式。

猜你喜欢

转载自blog.csdn.net/LLY_A_/article/details/107360421