美文网首页
BigDecimal

BigDecimal

作者: 帮我的鸵鸟盖个章 | 来源:发表于2020-03-27 18:04 被阅读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的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)

    相关文章

      网友评论

          本文标题:BigDecimal

          本文链接:https://www.haomeiwen.com/subject/awrruhtx.html