1. Quando o campo de definição requer alta precisão, o BigDecimal
tipo é 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) double
O 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 BigDecimal
exatamente igual 0.1116666
, mas na verdade é igual 0.111666600000000004744293846670188941061496734619140625
. Isso ocorre porque ele 0.1116666
nã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 String
mé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 String
método de construção primeiro.
3) Quando um Double
tipo d se double
transforma em BigDeciamal
, você pode usar o primeiro Double.toString(double)
método ou String.valueOf(double)
métodos double
convertidos em String
tipo e, em seguida, chamar o BigDeciamal
parâmetro para String
o tipo de método de construção, que é equivalente ao valor real.
3. BigDecimal
Explicação detalhada dos métodos comuns
1) Métodos comuns
add(BigDecimal)
: BigDecimal
adicione os valores no objeto para retornar o BigDecimal
objeto
subtract(BigDecimal)
: BigDecimal
Subtraia os valores do BigDecimal
objeto e retorna o objeto
multiply(BigDecimal)
: BigDecimal
Multiplique os valores no objeto para retornar o BigDecimal
objeto
divide(BigDecimal)
: BigDecimal
Divida o valor no BigDecimal
objeto e retorne o objeto
toString()
: Converta BigDecimal
o valor do objeto em uma string
doubleValue()
: Converta BigDecimal
o valor no objeto em um número de precisão dupla
floatValue()
: Converta BigDecimal
o valor no objeto em um único número de precisão
longValue()
: Converta BigDecimal
o valor no objeto em um inteiro longo
intValue()
: Converta BigDecimal
o valor no objeto para um inteiro
2), BigDecimal
comparação de tamanho
Java BigDecimal
geralmente usa bigdemical
o compareTo
método para comparar tamanhos
int a = bigdemical.compareTo(bigdemical2)
Análise de resultado de retorno:
a = -1, significa bigdemical
menor que bigdemical2
;
a = 0, significa bigdemical
igual bigdemical2
;
a = 1, significa bigdemical
maior 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 BigDecimal
da formatação de moeda e porcentagem como exemplo. Primeiro, crie um BigDecimal
objeto, depois de realizar BigDecimal
operações aritméticas, respectivamente estabeleça referências à formatação de moeda e porcentagem e, finalmente, use o BigDecimal
objeto 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. BigDecimal
Resumo
1). Use-o quando cálculos decimais precisos são necessários BigDecimal
. BigDecimal
A taxa de desempenho double
e a float
pobreza 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 String
o construtor com tipo de parâmetro .