BigDecimal与DecimalFormat最全用法

在开发过程中,我们经常使用BigDecimal代替double的作用,实现更精确的表达,以下部分为使用示例

1:获取两个小数的相加

public static BigDecimal add(double num1, double num2){
        BigDecimal bignum1 = new BigDecimal(num1);
        BigDecimal bignum2 = new BigDecimal(num2);
        return bignum1.add(bignum2);
    }

2:获取两个小数的相减

public static BigDecimal subtract(double num1, double num2){
        BigDecimal bignum1 = new BigDecimal(num1);
        BigDecimal bignum2 = new BigDecimal(num2);
        return bignum1.subtract(bignum2);
    }

3:获取两个小数的相乘

public static BigDecimal multiply(double num1, double num2){
        BigDecimal bignum1 = new BigDecimal(num1);
        BigDecimal bignum2 = new BigDecimal(num2);
        return bignum1.multiply(bignum2);
    }

4:获取两个小数的相除

public static BigDecimal divide(double num1, double num2){
        BigDecimal bignum1 = new BigDecimal(num1);
        BigDecimal bignum2 = new BigDecimal(num2);
        return bignum1.divide(bignum2,2,BigDecimal.ROUND_DOWN);
    }

说明:注意:除法的时候一定要在divide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出异常:

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

divide方法:bignum1除以bignum2,保留两位小数
多余位坐进位处理,4.233->4.24:
bignum1.divide(bignum2,2,BigDecimal.ROUND_UP);
多余位坐舍弃处理,4.233->4.23:
bignum1.divide(bignum2,2,BigDecimal.ROUND_DOWN);
四舍五入,4.255->4.26:
bignum1.divide(bignum2,2,BigDecimal.ROUND_HALF_UP);
五舍六入,4.255->4.25:
bignum1.divide(bignum2,2,BigDecimal.ROUND_HALF_DOWN);

5:获取百分率(两decimal相除)

/**
     * 获取百分率
     *
     * @param num   所求占比数据
     * @param total 总数据量
     * @param scale 精确到第几位
     * @return
     */
    public static String accuracy(double num, double total, int scale) {
        DecimalFormat df = (DecimalFormat) NumberFormat.getInstance();
        //可以设置精确几位小数
        df.setMaximumFractionDigits(scale);
        //模式 例如四舍五入
        df.setRoundingMode(RoundingMode.HALF_UP);
        double accuracy_num = num / total * 100;
        return df.format(accuracy_num) + "%";
    }

获取百分率(double转换)

double pi=3.1415927;//圆周率
//以百分比方式计数,并取两位小数
new DecimalFormat("#.##%").format(pi);//314.16%
发布了27 篇原创文章 · 获赞 1 · 访问量 861

猜你喜欢

转载自blog.csdn.net/weixin_44971379/article/details/103847924