BigDecimal con el más amplio uso DecimalFormat

Durante el desarrollo, a menudo utilizamos BigDecimal en lugar de una doble acción, la expresión más precisa, utilizando la siguiente porción ejemplar

1: la obtención de la suma de dos decimal

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

2: Obtener la resta de dos decimales

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

3: Consigue una multiplicación de dos decimales

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

4: Obtener la división de dos cifras decimales

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);
    }

Descripción: Nota: La división de tiempo debe pasar a un segundo método de parámetros se dividen, a definir una precisión de varios punto decimal, o en el caso no se divide, el resultado es un decimal infinito, se lanzará una excepción:

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

método de división: bignum1 divide bignum2, dos cifras decimales
bits extra tiene bits de procesamiento, 4.233-> 4.24:
bignum1.divide (bignum2,2, BigDecimal.ROUND_UP );
bits adicionales tomar el rechazo, 4.233-> 4.23:
bignum1.divide (bignum2,2, BigDecimal.ROUND_DOWN );
redondeada, 4.255-> 4,26:
bignum1.divide (bignum2,2, BigDecimal.ROUND_HALF_UP );
cinco apagado y seis, 4.255-> 4,25:
bignum1.divide (bignum2,2, el BigDecimal. ROUND_HALF_DOWN );

5: obtener por ciento (dos divisiones decimales)

/**
     * 获取百分率
     *
     * @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) + "%";
    }

Obtiene porcentaje (doble conversión)

double pi=3.1415927;//圆周率
//以百分比方式计数,并取两位小数
new DecimalFormat("#.##%").format(pi);//314.16%
Publicado 27 artículos originales · ganado elogios 1 · visitas 861

Supongo que te gusta

Origin blog.csdn.net/weixin_44971379/article/details/103847924
Recomendado
Clasificación