2012-01-26 5 views
23

Mam kwotę w formacie String. Na przykład: String salePrice = 348,00 USD.Jak przekonwertować wartość numeru ciągu ze znakiem dolnym na BigDecimal w java?

Jednak chcę przekonwertować tę wartość ciągu na wartość BigDecimal, ale ma ona znak dolara w ciągu. Próbowałem kodu poniżej, ale nie działa.

BigDecimal sPrice = new BigDecimal(salePrice); 

Skończyło się na ten wyjątek poniżej:

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

Odpowiedz

40

Numer BigDecimal Constructor przyjmuje prawidłowy łańcuch liczbowy.

ciąg znaków obejmuje opcjonalnego znak, '+' ('\ u002B') lub '-' ('\ u002D'), po którym następuje sekwencja zero lub więcej cyfr (dalej " liczba całkowita "), opcjonalnie, po którym następuje frakcja , po której ewentualnie występuje wykładnik.

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

Wyjście = 348.00

Można również spojrzeć na NumberFormat klasie. Korzystając z tej klasy, możesz ustawić odpowiadającą Locale.

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

Wyjście = 123.45

+0

co jeśli wartość ciąg jest zerowy lub „”. moja setproperty akceptuje tylko bigDecimal. – JNPW

+0

Nie można przekazać wartości 'null' do konstruktora bigDecimal. Zawiń mój kod wokół 'try-catch', aby wychwycić wyjątek. – RanRag

+0

+1, ponieważ pomogło mi to właśnie dzisiaj. – Brian

8

Usuń znak dolara ($) pierwszy.

+6

Dolar nie jest wielka dziesiętny te dni – Pedantic

3

Konstruktor wymaga numeru w ciągu znaków, ciąg rozpoczyna się od $, który nie jest prawidłową liczbą. Najpierw musisz go rozebrać.

Powiązane problemy