jueves, enero 26, 2012

Ojo con la conversión de números reales a texto en Java

Cuando necesitamos convertir un número real a texto en Java lo primero que intentamos es unir el número con un texto vacío así:

String valorTexto = "" + valorReal;


"Mágicamente", el operador "+", que permite unir dos textos, genera internamente una operación de conversión del valor numérico a texto sin que el programador tenga que preocuparse explícitamente por la conversión. ¿Cierto?

Pues la verdad es que esto funciona con números de hasta 7 cifras. ¿Qué pasa con un número de 8 cifras?

String valorTexto = "12345678.5"
double valorReal = Float.parseFloat(valorTexto);
valorTexto = "" + valorReal;


El texto resultante no es el "12345678.5" original sino un desconcertante "1.2345678E7".
Una buena opción para que todos los dígitos del número real se preserven y evitando la notación científica es usar la clase java.math.BigDecimal:

String valorTexto = "12345678.5";
BigDecimal valorReal = new BigDecimal(valorTexto);
valorTexto = valorReal.toPlainString();