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
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.
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.expandir
Si el parámetro es de tipo doble, utilizamos BigDecimal.valueOf (...) se puede hacer?
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. 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.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.