Introducción a los conceptos básicos de Java: uso de BigDecimal

Mira el código primero

System.out.println(0.2 + 0.1);
System.out.println(0.3 - 0.1);
System.out.println(0.2 * 0.1);
System.out.println(0.3 / 0.1);

输出:
0.30000000000000004
0.19999999999999998
0.020000000000000004
2.9999999999999996

        La razón del código que se muestra arriba es que nuestra computadora es binaria y no hay forma de que los números de punto flotante se representen con precisión en binario, por lo tanto, algunos números tienen los errores anteriores cuando se calculan.

        Hay un problema de pérdida de precisión en el proceso de cálculo. En el proceso de desarrollo, especialmente cuando el objetivo es la industria financiera, esta precisión existente es realmente muy grave. En este momento, BigDecimal descubrió. La clase de API BigDecimal proporcionada por Java en el paquete java.math se utiliza para realizar operaciones precisas en números con más de 16 dígitos significativos. La variable de punto flotante de doble precisión double puede manejar 16 dígitos significativos. En aplicaciones prácticas, es necesario realizar operaciones y procesamiento en números mayores o menores. Float y double solo se pueden usar para cálculos científicos o cálculos de ingeniería. Java.math.BigDecimal debe usarse en cálculos comerciales. Pero lo que BigDecimal crea es un objeto. No podemos usar operadores aritméticos tradicionales como +, -, *, / para realizar operaciones matemáticas directamente en el objeto, sino que debemos llamar a su método correspondiente. Los parámetros del método también deben ser objetos de BigDecimal. Constructor es un método especial de la clase, especialmente utilizado para crear objetos, especialmente objetos con parámetros.

Método de construcción

BigDecimal tiene muchos métodos de construcción, aquí hay algunos de uso común.

BigDecimal (int) convierte el tipo int en un objeto BigDecimal

BigDecimal (String) convierte el tipo de cadena en un objeto BigDecimal

BigDecimal intBigDecimal = new BigDecimal(1111111111);
System.out.println("intBigDecimal   "+intBigDecimal);

BigDecimal strBigDecimal = new BigDecimal("11111111111111111111111");
System.out.println("strBigDecimal:   "+strBigDecimal);

输出:
intBigDecimal   1111111111
strBigDecimal:   11111111111111111111111

BigDecimal también puede convertir BigInteger doble, largo, en objetos BigDecimal, pero debe tenerse en cuenta que no se recomienda utilizar BigDecimal para convertir datos de tipo doble

        BigDecimal doubleBigDecimal = new BigDecimal(1.33333);
        System.out.println("doubleBigDecimal   "+doubleBigDecimal);

输出:
doubleBigDecimal   1.3333299999999999041477849459624849259853363037109375

La solución proporcionada por JDK es utilizar la conversión de formato de cadena para resolver este tipo de problema de pérdida de precisión

BigDecimal temp = new BigDecimal("1.33333");
System.out.println("temp   "+temp);

输出:
temp   1.33333

Por lo tanto, generalmente se recomienda utilizar primero el método de construcción String.

 

Método de operación BigDecimal

En primer lugar, debe estar seguro, BigDecimal no admite + - * / este tipo de operación, tiene su propio método de operación

Operación de adición BigDecimal add (BigDecimal augend)

Operación de resta de restar BigDecimal (sustraendo BigDecimal)

Operación de multiplicación BigDecimal multiply (BigDecimal multiplicand)

Operación de división BigDecimal divide (BigDecimal divisor)

ejemplo:

BigDecimal num1 = new BigDecimal("1.33333");
BigDecimal num2 = new BigDecimal("2.66666");
System.out.println("加:add   "+num1.add(num2));
System.out.println("减:subtract   "+num1.subtract(num2));
System.out.println("乘:multiply   "+num1.multiply(num2));
// num1 除以 num2
System.out.println("除:divide   "+num1.divide(num2));

输出:
加:add   3.99999
减:subtract   -1.33333
乘:multiply   3.5555377778
除:divide   0.5

Nota: La suma, resta, multiplicación y división en realidad devuelven un nuevo objeto BigDecimal, porque BigInteger y BigDecimal son inmutables, y cada paso de la operación generará un nuevo objeto.

BigDecimal temp = null;
BigDecimal num3 = new BigDecimal("1.33333");
BigDecimal num4 = new BigDecimal("2.66666");
temp = num3.add(num4);
System.out.println("num3: " + num3);
System.out.println("temp: " + temp);

输出:
num3: 1.33333
temp: 3.99999

Si hay un error, corríjame, gracias.

Supongo que te gusta

Origin blog.csdn.net/qq_33369215/article/details/53418516
Recomendado
Clasificación