2012-01-26 10 views
23

Ho un importo in dollari in un formato stringa. Ad esempio: String salePrice = $ 348,00.Come posso convertire un valore di numero di stringa con un segno di dollaro in BigDecimal in java?

Tuttavia, voglio convertire questo valore di stringa in un valore BigDecimal, ma ha un segno di dollaro nella stringa. Ho provato il codice qui sotto ma non funziona.

BigDecimal sPrice = new BigDecimal(salePrice); 

Ho finito per ottenere questa eccezione di seguito:

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

risposta

40

Il numero BigDecimal Constructor prende una stringa numerica valida.

la rappresentazione di stringa è costituito da un segno opzionale, '+' ('\ u002B') o '-' ('\ u002D'), seguita da una sequenza di zero o più cifre decimali ("la intero "), facoltativamente seguito da una frazione , facoltativamente seguita da un esponente.

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

uscita = 348.00

È inoltre può guardare NumberFormat classe. Utilizzando questa classe è possibile impostare il corrispondente Locale.

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

uscita = 123.45

+0

cosa succede se il valore della stringa è nullo o "". la mia setproperty accetta solo bigDecimal. – JNPW

+0

Non è possibile passare il valore 'null' al costruttore bigDecimal. Avvolgi il mio codice in 'try-catch' per rilevare l'eccezione. – RanRag

+0

+1 come questo mi ha aiutato proprio oggi. – Brian

8

Rimuovere il simbolo del dollaro ($) per primo.

+6

Un dollaro non è un grosso decimale in questi giorni – Pedantic

3

Il costruttore richiede un numero nella stringa, la stringa inizia con un numero $, che non è un numero valido. Devi prima toglierlo.

Problemi correlati