El ejemplo de este artículo describe el método de operación de BigDecimal en Java. Compártelo con todos para tu referencia. El análisis específico es el siguiente:
Dado que double y float no son lo suficientemente precisos, se debe utilizar BigDecimal al realizar cálculos comerciales. El objeto BigDecimal se crea de la siguiente manera:
Copie el código de la siguiente manera: BigDecimal b = new BigDecimal("12.000001");
System.out.println(b);
El resultado de salida es: 12.000001;
BigDecimal se puede pasar en String y duplicarlo al crearlo, pero es mejor usar String. En cuanto al motivo, solo mire el siguiente código:
Copie el código de la siguiente manera: BigDecimal b = new BigDecimal("12.000001");
System.out.println(b);
GranDecimal c = nuevo GranDecimal(12.01);
System.out.println(c);
El resultado de ejecución es:
12.000001
12.0099999999999997868371792719699442386627197265625
Se puede ver que la precisión se perderá cuando se pase el doble.
Otras operaciones de BigDecimal son las siguientes:
Copie el código. El código es el siguiente: //Adición
público estático BigDecimal add(String num1, String num2) {
BigDecimal bd1 = nuevo BigDecimal(num1);
BigDecimal bd2 = nuevo BigDecimal(num2);
devolver bd1.add(bd2);
}
//Sustracción
resta BigDecimal estática pública (cadena num1, cadena num2) {
BigDecimal bd1 = nuevo BigDecimal(num1);
BigDecimal bd2 = nuevo BigDecimal(num2);
devolver bd1.subtract(bd2);
}
//multiplicación
multiplicación BigDecimal estática pública (cadena num1, cadena num2) {
BigDecimal bd1 = nuevo BigDecimal(num1);
BigDecimal bd2 = nuevo BigDecimal(num2);
devolver bd1.multiplicar(bd2);
}
//división
división BigDecimal estática pública (cadena num1, cadena num2, int i) {
BigDecimal bd1 = nuevo BigDecimal(num1);
BigDecimal bd2 = nuevo BigDecimal(num2);
// i es el número de dígitos que se conservarán, BigDecimal.ROUND_HALF_UP representa la regla de redondeo
devolver bd1.divide(bd2, i, BigDecimal.ROUND_HALF_DOWN);
}
Es necesario enfatizar la división. El tercer parámetro es si se debe redondear.
ROUND_HALF_DOWN significa que no se ingresará 1 cuando se encuentre 5, es decir, 1.5->1;
ROUND_HALF_UP significa que cuando se encuentra 5, se ingresa 1, es decir, 1.5->2;
Pero hay algunas cosas a tener en cuenta:
Cuando usamos ROUND_HALF_DOWN, copiamos el código de la siguiente manera: 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));
Los resultados de ejecución son los siguientes:
13.5500
13.5
-------
13.5502
13.6
Estaba confundido. ¡Lógicamente el segundo resultado debería ser 13,5! ¿Por qué pasó a ser 13,6? Después de muchas pruebas, lo pensé y descubrí que este redondeo no se basa en el desplazamiento después del dígito de precisión y lo compara con 5, sino que todos los datos después del dígito de precisión se comparan con 5. En otras palabras: 13.5500 tiene una precisión de un dígito, luego use 0.0500 para comparar con 5, y 13.5502 tiene una precisión de un dígito, luego use 0.0502 para comparar con 5. Es mayor que 5, por lo que cierra hacia arriba.
Espero que este artículo sea útil para la programación Java de todos.