BigDecimal com o DecimalFormat mais abrangente uso

Durante o desenvolvimento, muitas vezes usamos BigDecimal em vez de um duplo efeito, a expressão mais precisa, utilizando a seguinte parte exemplar

1: obter a soma de duas casas decimais

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

2: Obter a subtração de duas casas decimais

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

3: Get multiplicando dois decimal

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

4: Obter os divisão duas casas decimais

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

Descrição: Nota: A divisão do tempo deve passar por um segundo método parâmetro dividir, definir com precisão de vários ponto decimal, ou no caso não se divide, o resultado é uma casa decimal infinita, ele irá lançar uma exceção:

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

método de divisão: bignum1 dividida bignum2, duas casas decimais
extra bits tem bit de processamento, 4.233-> 4,24:
bignum1.divide (bignum2,2, BigDecimal.ROUND_UP );
extra de bits de tomar a rejeição, 4.233-> 4,23:
bignum1.divide (bignum2,2, BigDecimal.ROUND_DOWN );
arredondado, 4.255-> 4,26:
bignum1.divide (bignum2,2, BigDecimal.ROUND_HALF_UP );
cinco off e seis, 4.255-> 4.25:
bignum1.divide (bignum2,2, o BigDecimal. ROUND_HALF_DOWN );

por cento Get (dois divisão decimal): 5

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

Obtém percentagem (dupla conversão)

double pi=3.1415927;//圆周率
//以百分比方式计数,并取两位小数
new DecimalFormat("#.##%").format(pi);//314.16%
Publicado 27 artigos originais · ganhou elogios 1 · vista 861

Acho que você gosta

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