Estos es un problemilla que te puede pasar parseando un String que representa un BigDecimal en Java.
La tÃpica entrada de texto, simple en apariencia, te puede dar por culo un buen rato si intentas recuperar números decimales.
Una entrada como “1,8″ la puedes interpretar como una representación en String de un BigDecimal. Entonces, si vas a saco puedes pensar que lo suyo es hacer tal que asÃ:
BigDecimal numerito = new BigDecimal("1,8");
Lo malo es que 1,8 no tiene sentido como número para los “anglos”, por lo que habrá que reformatear para obtener un “1.8″. Para eso hay que hacer un NumberFormat con el Locale español:
Locale locale = new Locale("es", "ES");
NumberFormat nf = NumberFormat.getInstance(locale);
Ahora que tenemos el “formateador” podemos parsear el numero:
Number numero = nf.parse("1,8");
Ahora podrÃa pensar que con numero.doubleValue() te puedes quedar tan ancho pero no exactamente. El BigDecimal que obtienes con new BigDecimal(numero.doubleValue()) es el siguiente:
1.8000000000000000444089209850062616169452667236328125
¿Por que narices sale eso a partir de un 1,8? Pues ni puta idea, pero pasemos de eso. Yo quiero un número que sea un 1,8 y lo puedo obtener asÃ:
new BigDecimal(numero.toString())
Y eso es todo. Una chorrada pero que te puede tocar las narices sobre manera, sobretodo si tienes que meter el valor ese en un campo de la base de datos que puede que no esté dimensionado para albergar el chorro de arriba.