Flotadores y dobles son limitados. Solo son capaces de representar con precisión porciones fraccionarias de números como una suma de dos fracciones de base. La parte fraccionaria puede ser plenamente representada como la suma de algunas series como:
1/2 + 0/4 + 1/8 + 1/16 + ...
Por desgracia hay un gran número de frecuencia números usados que nunca pueden ser plenamente representados, como:
1/3, 1/7, 1/9, 5/11, etc.
debe tener en cuenta si el número se puede representar con precisión antes de preocuparse redondeando Si este tipo de precisión es de extrema importancia, entonces debe buscar una solución no flotante o no doble.
Hay bibliotecas de decimales binarias que realizarán con precisión tales cálculos. Tienden a ser más lentos de calcular, porque no hay hardware especializado para acelerar sus cálculos. Además, tienden a ocupar más memoria, porque básicamente estás almacenando una lista de dígitos.
Después de que pueda representar el número que desea con los detalles que desea, entonces una solución de redondeo es simple. Las probabilidades son que ni siquiera necesitará una solución de redondeo; porque, la razón principal por la que intentas redondear en este caso se debe a que el flotador no puede representar tu valor correctamente.
me rompió la línea única en varias líneas y se lo pasó por el depurador. El problema parece estar en el análisis sintáctico. Parece que Float.parseFloat está redondeando a "32000.0" – Shane
@Shane: Aún asumes que el depurador te está mostrando el valor exacto, sospecho. –
cambiando a BigDecimal solucionado mis problemas con decimales – jeff