Algunos problemas en el cálculo de números de coma flotante doble y el uso de bigDecimal

ponerte a prueba

Permítanme comenzar con algunas preguntas simples.

System.out.println (1/5); ¿Cuál es el resultado de salida?

Respuesta a la pregunta 1

System.out.println (null-0.0); ¿Cuál es el resultado de salida?

Respuesta a la pregunta 2

parte doble

Si un cálculo doble es nulo, ¿informará de un error?

Double d1=0.0;
Double d2=1.0;
Double result=d1-d2;

La medición real reporta un error. Por lo tanto, la verificación no nula debe realizarse antes del cálculo del tipo doble.
Cabe señalar aquí que si no se establece en nulo, el valor inicializado es 0.0 y no se informa ningún error.

El tipo doble establece el denominador en 1

Porque si el denominador es 0.0, entonces el resultado será Infinito.
Por lo tanto, es mejor establecerlo en otro valor.

Double d1=0.0;
Double d2=1.0;
Double result=d1/(d2!=0?d2:1.0);

Parte BigDecimal

Por que usar BigDecimal

El cálculo de coma flotante en Java no es muy preciso, BigDecimal puede resolver este problema muy bien.

Dar formato a posiciones decimales

El soporte de BigDecimal para esto sigue siendo muy bueno. Por ejemplo, establézcalo en 6 posiciones decimales.

private BigDecimal amount;

this.amount=new BigDecimal(0.0).setScale(6,BigDecimal.ROUND_HALF_UP);

Parte de respuesta

Respuesta a la pregunta 1

Tema 1: System.out.println (1/5); ¿Cuál es el resultado de salida?

No el 0,2 esperado, sino el 0.
Dado que 1/5 se escribe como una división entera, los lugares decimales se ignorarán. Entonces el resultado es 0.

Si desea devolver 0.2, se puede utilizar cualquiera de los dos tipos siguientes.

Agregar .0 significa un número de punto flotante y se realizará un cálculo de punto flotante:
1.0/5
agregar d significa que es un tipo de punto flotante doble, y se realizará un cálculo de punto flotante:
1d/5

Respuesta a la pregunta 2:

Tema 2: System.out.println (null-0.0); ¿Cuál es el resultado de salida?

¿Está dando 0?
No, se informará un error. Porque los números de punto flotante no pueden ser nulos al calcular.

otro

Supongo que te gusta

Origin blog.csdn.net/enthan809882/article/details/113939618
Recomendado
Clasificación