Tipo BigDecimal em Java

1. Quando o campo de definição requer alta precisão, o BigDecimaltipo é geralmente usado .
2. O construtor comumente usado
BigDecimal(int)cria um objeto
BigDecimal(double)com o valor inteiro especificado pelo parâmetro. Cria um objeto com o valor de precisão dupla especificado pelo parâmetro.
BigDecimal(long)Cria um objeto com o valor inteiro longo
BigDecimal(String)especificado pelo parâmetro. Cria um objeto com o valor especificado pelo parâmetro em uma string. Os objetos
podem criar objetos BigDecimal diretamente e passar os valores correspondentes de diferentes tipos, porém, ao passar os valores float e double, algumas situações imprevisíveis ocorrerão.

double aa = 0.1116666;
BigDecimal bb = new BigDecimal(aa);
System.out.println("bb的值为"+bb);

Os resultados são os seguintes:

bb的值为0.111666600000000004744293846670188941061496734619140625

Análise de causa:

1) doubleO resultado do método de construção com o tipo de parâmetro é um tanto imprevisível. Pode-se pensar que escrever em Java newBigDecimal(0.1116666)cria BigDecimalexatamente igual 0.1116666, mas na verdade é igual 0.111666600000000004744293846670188941061496734619140625. Isso ocorre porque ele 0.1116666não pode ser expresso com precisão double(ou, neste caso, não pode ser expresso como qualquer decimal binário de comprimento finito). O valor passado para o construtor não será exatamente igual 0.1116666(embora na superfície seja igual a este valor).

2) o Stringmétodo de construção é totalmente previsível: a escrita newBigDecimal(“0.1116666”)criará um BigDecimal, que é exatamente igual ao esperado 0.1116666. Portanto, em comparação, geralmente é recomendado usar o Stringmétodo de construção primeiro.

3) Quando um Doubletipo d se doubletransforma em BigDeciamal, você pode usar o primeiro Double.toString(double)método ou String.valueOf(double)métodos doubleconvertidos em Stringtipo e, em seguida, chamar o BigDeciamalparâmetro para Stringo tipo de método de construção, que é equivalente ao valor real.
3. BigDecimalExplicação detalhada dos métodos comuns
1) Métodos comuns
add(BigDecimal): BigDecimaladicione os valores no objeto para retornar o BigDecimalobjeto

subtract(BigDecimal): BigDecimalSubtraia os valores do BigDecimalobjeto e retorna o objeto

multiply(BigDecimal): BigDecimalMultiplique os valores no objeto para retornar o BigDecimalobjeto

divide(BigDecimal): BigDecimalDivida o valor no BigDecimalobjeto e retorne o objeto

toString(): Converta BigDecimalo valor do objeto em uma string

doubleValue(): Converta BigDecimalo valor no objeto em um número de precisão dupla

floatValue(): Converta BigDecimalo valor no objeto em um único número de precisão

longValue(): Converta BigDecimalo valor no objeto em um inteiro longo

intValue(): Converta BigDecimalo valor no objeto para um inteiro
2), BigDecimalcomparação de tamanho
Java BigDecimalgeralmente usa bigdemicalo compareTométodo para comparar tamanhos

int a = bigdemical.compareTo(bigdemical2)

Análise de resultado de retorno:

a = -1, significa bigdemicalmenor que bigdemical2;
a = 0, significa bigdemicaligual bigdemical2;
a = 1, significa bigdemicalmaior que bigdemical2;
por exemplo: a é maior ou igual a b

new bigdemica(a).compareTo(new bigdemical(b)) >= 0

4. Formato BigDecima````格式化 由于NumberFormat 类的() 方法可以使用BigDecimal 对象作为其参数,可以利用BigDecimal``` realiza o controle de formatação em valores de moeda, valores percentuais e valores gerais que excedem 16 dígitos significativos.

Pegue o uso BigDecimalda formatação de moeda e porcentagem como exemplo. Primeiro, crie um BigDecimalobjeto, depois de realizar BigDecimaloperações aritméticas, respectivamente estabeleça referências à formatação de moeda e porcentagem e, finalmente, use o BigDecimalobjeto como um format()parâmetro de método para emitir seu valor de moeda formatado e porcentagem.

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

resultado:

贷款金额: ¥15,000.48 利率: 0.8% 利息: ¥120.00

5. BigDecimalResumo
1). Use-o quando cálculos decimais precisos são necessários BigDecimal. BigDecimalA taxa de desempenho doublee a floatpobreza são especialmente óbvias ao lidar com cálculos enormes e complexos. Portanto, o cálculo da precisão geral não é necessário BigDecimal.
2) Tente usar Stringo construtor com tipo de parâmetro .

Acho que você gosta

Origin blog.csdn.net/weixin_43213064/article/details/109562365
Recomendado
Clasificación