BigDecimal

2020-03-27  本文已影响0人  帮我的鸵鸟盖个章

1. 加减乘除

BigDecimal bignum1 = new BigDecimal("10"); 
BigDecimal bignum2 = new BigDecimal("5"); 
BigDecimal bignum3 = null; 

加法 add

bignum3 =  bignum1.add(bignum2);      

减法 subtract

bignum3 = bignum1.subtract(bignum2);

乘法 multiply

bignum3 = bignum1.multiply(bignum2);

除法 divide

bignum3 = bignum1.divide(bignum2);
    public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) {
        if (roundingMode < ROUND_UP || roundingMode > ROUND_UNNECESSARY)
            throw new IllegalArgumentException("Invalid rounding mode");
        if (this.intCompact != INFLATED) {
            if ((divisor.intCompact != INFLATED)) {
                return divide(this.intCompact, this.scale, divisor.intCompact, divisor.scale, scale, roundingMode);
            } else {
                return divide(this.intCompact, this.scale, divisor.intVal, divisor.scale, scale, roundingMode);
            }
        } else {
            if ((divisor.intCompact != INFLATED)) {
                return divide(this.intVal, this.scale, divisor.intCompact, divisor.scale, scale, roundingMode);
            } else {
                return divide(this.intVal, this.scale, divisor.intVal, divisor.scale, scale, roundingMode);
            }
        }
    }

第一个参数是分母;第二个参数是保留的小数位数,第三个参数是数据的处理方式(四舍五入等)

2. 比较大小

使用compareTo(BigDecimal)方法比较大小。

int flag = bigdemical1.compareTo(bigdemical2)
flag = -1,表示bigdemical1小于bigdemical2;
flag = 0,表示bigdemical1等于bigdemical2;
flag = 1,表示bigdemical1大于bigdemical2;

实际中直接跟0比较

3. BigDecimal.setScale()方法用于格式化小数点

//表示保留一位小数,默认用四舍五入方式
setScale(1) 
//直接删除多余的小数位,如2.35会变成2.3 
setScale(1,BigDecimal.ROUND_DOWN)
//进位处理,2.35变成2.4 
setScale(1,BigDecimal.ROUND_UP)
//四舍五入,2.35变成2.4
setScale(1,BigDecimal.ROUND_HALF_UP)
//四舍五入,2.35变成2.3,如果是5则向下舍
setScaler(1,BigDecimal.ROUND_HALF_DOWN)
//接近正无穷大的舍入
setScaler(1,BigDecimal.ROUND_CEILING)
//接近负无穷大的舍入,数字>0和ROUND_UP作用一样,数字<0和ROUND_DOWN作用一样
setScaler(1,BigDecimal.ROUND_FLOOR)
//向最接近的数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
setScaler(1,BigDecimal.ROUND_HALF_EVEN)

格式化

由于NumberFormat类的format()方法可以使用BigDecimal对象作为其参数,可以利用BigDecimal对超出16位有效数字的货币值,百分值,以及一般数值进行格式化控制。

//建立货币格式化引用
NumberFormat currency = NumberFormat.getCurrencyInstance(); 
//建立百分比格式化引用
NumberFormat percent = NumberFormat.getPercentInstance(); 
//百分比小数点最多3位
percent.setMaximumFractionDigits(3); 
//贷款金额
BigDecimal loanAmount = new BigDecimal("150.48"); 
//利率
BigDecimal interestRate = new BigDecimal("0.008"); 
//相乘
BigDecimal interest = loanAmount.multiply(interestRate); 
//贷款金额: ¥150.48
System.out.println("贷款金额:\t" + currency.format(loanAmount));
//利率: 0.8%
System.out.println("利率:\t" + percent.format(interestRate)); 
 //利息: ¥1.20
System.out.println("利息:\t" + currency.format(interest));

参考资料

BigDecimal:BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)

上一篇 下一篇

猜你喜欢

热点阅读