BIGDECIMAL ser el uso de un error de cálculo en coma flotante precisa y el uso adecuado

prefacio

Por lo general relacionado con la informática empresarial fraccional, utilizaremos BigDecimal para completar la suma y la resta multiplicación y división. Sin embargo, cuando se utiliza una aritmética de coma flotante de precisión BigDecimal, tener en cuenta el método correcto. Si el método seleccionado correctamente, el error se sigue produciendo.

Encontrado el problema

Aquí Insertar imagen Descripción
El método de prueba de un BigDecimal dos configuraciones, un resultado diferente se encontró operación de punto flotante. método BigDecimal.valueOf de la construcción de un objeto mediante el uso de un método, de punto flotante excepción precisión ocurrió se obtiene. Utilizando el método nuevo BigDecimal (String val), la operación correcta.

causas

Ver código fuente BigDecimal.valueOf, podemos encontrar el problema. BigDecimal.valueOf (9.9f), la llamada al método actual es: java.math.BigDecimal # valueOf (doble). Como se muestra en la figura.

Aquí Insertar imagen Descripción
Múltiples pasos fundido de la acción de lo que pensábamos. 9.9f serán arrojados al doble. Probar este reparto, podemos encontrar el problema, de hecho, el reparto aquí. resultados emitidos se muestran en la figura.
Aquí Insertar imagen Descripción

expandir

Si el parámetro es de tipo doble, utilizamos BigDecimal.valueOf (...) se puede hacer?

Aquí Insertar imagen Descripción
consecuencia mirada no es ningún problema. Sin embargo, la fuente nota BigDecimal.valueOf (...), que todavía está dentro de la cadena de caracteres convierte en los datos de referencia correspondientes a la doble. Si el uso directo de new BigDecimal (doble val) calcula constructor, los resultados se encontró que se produce una excepción de precisión. Como se muestra en la figura.
Aquí Insertar imagen Descripción
Las notas pueden ser vistos dentro de la JDK, se ha descrito, los resultados de nuevo BigDecimal (doble val) método get es impredecible. El parámetro de tipo recomendado al constructor de String cálculo preciso de números de punto flotante.
Aquí Insertar imagen Descripción

resumen

Diferente 1, al usar cálculos científicos BigDecimal, tenemos que ser claros, BigDecimal.valueOf (...) y new BigDecimal (...) el uso de efectos. Cuando BigDecimal.valueOf (...) del tiempo de referencia es un tipo flotador, BigDecimal pone en el molde referencia a duplicar. 2, utilizando el nuevo BigDecimal (String val) para obtener el flotador correspondiente objetos BigDecimal, completando de este modo la precisión aritmética de punto flotante.

Supongo que te gusta

Origin juejin.im/post/5e86085ce51d4547153d0769
Recomendado
Clasificación