2012-01-26 16 views
23

Tengo una cantidad en dólares en formato de cadena. Por ejemplo: String salePrice = $ 348.00.¿Cómo convierto un valor numérico de cadena con un signo de dólar a BigDecimal en Java?

Sin embargo, quiero convertir este valor de cadena a un valor de BigDecimal, pero tiene un signo de dólar en la cadena. Probé el código a continuación, pero no está funcionando.

BigDecimal sPrice = new BigDecimal(salePrice); 

que terminó siendo esta excepción a continuación:

java.lang.NumberFormatException 
    at java.math.BigDecimal.<init>(Unknown Source) 
    at java.math.BigDecimal.<init>(Unknown Source) 

Respuesta

40

El BigDecimal Constructor toma una cadena numérica válida.

La representación de cadena consiste en un signo opcional, '+' ('\ u002B') o '-' ('\ u002D'), seguido de una secuencia de cero o más dígitos decimales ("el entero "), seguido opcionalmente por una fracción , seguido opcionalmente por un exponente.

String salePrice = "$348.00"; 
String price = salePrice.replace("$",""); 
BigDecimal sPrice = new BigDecimal(price); 
System.out.println(sPrice); 

salida = 348.00

También puede mirar NumberFormat clase. Usando esta clase puede configurar su correspondiente Locale.

String salePrice = "$123.45"; 
Locale locale = Locale.US; 
Number number = NumberFormat.getCurrencyInstance(locale).parse(salePrice); 
System.out.println(number); 

salida = 123.45

+0

lo que si el valor de cadena es nula o "". my setproperty solo acepta bigDecimal. – JNPW

+0

No se puede pasar el valor 'null' al constructor bigDecimal. Envuelva mi código alrededor de 'try-catch' para atrapar la excepción. – RanRag

+0

+1 ya que esto me ayudó solo hoy. – Brian

8

quite el signo de dólar ($) en primer lugar.

+6

Un dólar no es un gran decimal estos días – Pedantic

3

El constructor requiere un número en la cadena, su cadena comienza con un $, que no es un número válido. Primero debe quitárselo.

Cuestiones relacionadas