O exemplo neste artigo descreve o método de operação de BigDecimal em java. Compartilhe com todos para sua referência. A análise específica é a seguinte:
Como double e float não são suficientemente precisos, BigDecimal deve ser usado ao realizar cálculos comerciais. O objeto BigDecimal é criado da seguinte forma:
Copie o código da seguinte forma: BigDecimal b = new BigDecimal("12.000001");
System.out.println(b);
O resultado de saída é: 12.000001;
BigDecimal pode ser passado em String e double ao criá-lo, mas é melhor usar String. Quanto ao motivo, basta observar o seguinte código:
Copie o código da seguinte forma: BigDecimal b = new BigDecimal("12.000001");
System.out.println(b);
BigDecimal c = novo BigDecimal(12.01);
System.out.println(c);
O resultado da execução é:
12.000001
12.009999999999997868371792719699442386627197265625
Pode-se observar que a precisão será perdida quando double for passado.
Outras operações do BigDecimal são as seguintes:
Copie o código. O código é o seguinte: //Adição.
public static BigDecimal add(String num1, String num2) {
BigDecimal bd1 = novo BigDecimal(num1);
BigDecimal bd2 = novo BigDecimal(num2);
retornar bd1.add(bd2);
}
//Subtração
public static BigDecimal subtract(String num1, String num2) {
BigDecimal bd1 = novo BigDecimal(num1);
BigDecimal bd2 = novo BigDecimal(num2);
retornar bd1.subtract(bd2);
}
//multiplicação
public static BigDecimal multiplicar (String num1, String num2) {
BigDecimal bd1 = novo BigDecimal(num1);
BigDecimal bd2 = novo BigDecimal(num2);
retornar bd1.multiply(bd2);
}
//divisão
public static BigDecimal divide(String num1, String num2, int i) {
BigDecimal bd1 = novo BigDecimal(num1);
BigDecimal bd2 = novo BigDecimal(num2);
// i é o número de dígitos a serem retidos, BigDecimal.ROUND_HALF_UP representa a regra de arredondamento
retornar bd1.divide(bd2, i, BigDecimal.ROUND_HALF_DOWN);
}
É necessário enfatizar a divisão. O terceiro parâmetro é arredondar.
ROUND_HALF_DOWN significa que 1 não será inserido quando 5 for encontrado, ou seja, 1,5->1;
ROUND_HALF_UP significa que quando 5 é encontrado, 1 é inserido, ou seja, 1,5->2;
Mas há algumas coisas a serem observadas:
Quando usamos ROUND_HALF_DOWN, copie o código da seguinte forma: System.out.println(this.divide("67.75", "5",4));
System.out.println(this.divide("67,75", "5",1));
System.out.println("-------");
System.out.println(this.divide("67.751", "5",4));
System.out.println(this.divide("67.751", "5",1));
Os resultados da execução são os seguintes:
13,5500
13,5
-------
13.5502
13.6
Fiquei confuso. Logicamente o segundo resultado deveria ser 13,5! Por que se tornou 13,6? Depois de muitos testes, pensei sobre isso e descobri que esse arredondamento não é baseado no deslocamento após o dígito de precisão e o compara com 5, mas todos os dados após o dígito de precisão são comparados com 5. Em outras palavras: 13,5500 é preciso para um dígito, então use 0,0500 para comparar com 5, e 13,5502 tem precisão de um dígito, então use 0,0502 para comparar com 5. É maior que 5, então fecha para cima.
Espero que este artigo seja útil para a programação Java de todos.