BigDecimal 类的用法

如果进行科学计算、财务计算时,使用 double可能不准确,可以使用 BigDecimal类。

可以调用 add(),subtract(),multiply(),divide() 进行加减乘除操作。

(1)可以按照四舍五入的规则对于小数点后指定位置的数据进行舍入;

(2)具备了任意精度的小数保留。

import java.math.BigDecimal;
import java.math.RoundingMode;

public class bigDecimalTest {
    public static void main(String[] args) {

        BigDecimal bd1 = new BigDecimal(0.511234);
        BigDecimal bd2 = new BigDecimal(0.621234);

//加法:BigDecimal add(BigDecimal augend)
        BigDecimal add01 = bd1.add(bd2);
        //设定前
        System.out.println(add01); //1.13246799999999991914734209785819984972476959228515625
        //设定 setScale(小数位数,舍入策略)
        BigDecimal bd3 = add01.setScale(2,RoundingMode.HALF_UP);// 保留两位小数,向上取舍
        System.out.println(bd3); //1.13

//减法:BigDecimal subtract(BigDecimal subtrahend)
        BigDecimal subtract01 = bd1.subtract(bd2);
        BigDecimal bd4 = subtract01.setScale(3,RoundingMode.HALF_UP);
        System.out.println(bd4); //-0.110

//乘法:BigDecimal multiply(BigDecimal multiplicand)
        BigDecimal multiply01 = bd1.multiply(bd2);
        BigDecimal bd5 = multiply01.setScale(3,RoundingMode.HALF_UP);
        System.out.println(bd5); //0.318

//除法:BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
        BigDecimal divide01 = bd1.divide(bd2,2,RoundingMode.HALF_UP);
        System.out.println(divide01); //0.82
    }
}

注意:'加减乘' 是计算完结果以后再指定保留位数和舍入策略,'除' 可以当即设定保留位数和舍入策略。

枚举常量摘要(舍入策略)
  CEILING 向正无限大方向舍入的舍入模式。
  DOWN   向零方向舍入的舍入模式。
  FLOOR  向负无限大方向舍入的舍入模式。
  HALF_DOWN 向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向下舍入。
  HALF_EVEN 向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
  HALF_UP  向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。
  UNNECESSARY 用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入。
  UP  远离零方向舍入的舍入模式。

posted @ 2022-04-12 19:30  鹿先森JIAN  阅读(46)  评论(0编辑  收藏  举报