Estoy tratando de leer algunos valores BigDecimal de la cadena. Digamos que tengo esta cadena: "1,000,000,000.999999999999999" y quiero obtener un BigDecimal de ella. ¿Cuál es la forma de hacerlo?
En primer lugar, no me gustan las soluciones que usan reemplazos de cadenas (reemplazando comas, etc.). Creo que debería haber algún formateador ordenado para hacer ese trabajo por mí.
Encontré una clase DecimalFormatter, sin embargo, como funciona a través del doble, se pierden grandes cantidades de precisión.
Entonces, ¿cómo puedo hacerlo?
java
parsing
bigdecimal
bezmax
fuente
fuente
BigDecimal
.Respuestas:
Compruébalo
setParseBigDecimal
en DecimalFormat. Con este setter,parse
te devolverá un BigDecimal.fuente
Código completo para demostrar que no
NumberFormatException
se lanza:Salida
fuente
1000000000.999999999999999
DecimalFormatSymbols.getInstance().getGroupingSeparator()
lugar de una coma, no es necesario que se asuste por las diferentes configuraciones regionales.El siguiente código de muestra funciona bien (la configuración regional debe obtenerse dinámicamente)
fuente
El código podría ser más limpio, pero parece funcionar para diferentes configuraciones regionales.
fuente
Así es como lo haría:
Obviamente, si esto fuera en código de producción, no sería tan simple.
No veo ningún problema con simplemente eliminar las comas de la cadena.
fuente
Necesitaba una solución para convertir un String en un BigDecimal sin conocer la configuración regional y ser independiente de la configuración regional. No pude encontrar ninguna solución estándar para este problema, así que escribí mi propio método de ayuda. Puede que también ayude a alguien más:
Actualización: ¡Advertencia! Este método auxiliar funciona solo para números decimales, por lo que los números que siempre tienen un punto decimal. De lo contrario, el método auxiliar podría generar un resultado incorrecto para números entre 1000 y 999999 (más / menos). ¡Gracias a bezmax por su gran aportación!
Por supuesto que probé el método:
fuente
7,333
representa? ¿Es 7333 o 7 y 1/3 (7.333)? En diferentes lugares, ese número se analizaría de manera diferente. Aquí hay una prueba de concepto: ideone.com/Ue9rT8eliminará todos los caracteres excepto los dígitos y el punto de su cadena.
Para que sea compatible con la configuración regional, es posible que desee utilizar
getDecimalSeparator()
fromjava.text.DecimalFormatSymbols
. No sé Java, pero podría verse así:fuente
Tema antiguo, pero quizás el más fácil es usar Apache commons NumberUtils que tiene un método createBigDecimal (valor de cadena) ....
Supongo (espero) que tenga en cuenta las configuraciones regionales o de lo contrario sería bastante inútil.
fuente
Por favor, intente esto, funciona para mí
fuente