63

I have this String: 10,692,467,440,017.120 (it's an amount).

I want to parse it to a BigDecimal. The problem is that I have tried both DecimalFormat and NumbeFormat in vain.

peterh
  • 11,875
  • 18
  • 85
  • 108
BenMansourNizar
  • 1,558
  • 4
  • 21
  • 42

4 Answers4

81

Try this

// Create a DecimalFormat that fits your requirements
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator(',');
symbols.setDecimalSeparator('.');
String pattern = "#,##0.0#";
DecimalFormat decimalFormat = new DecimalFormat(pattern, symbols);
decimalFormat.setParseBigDecimal(true);

// parse the string
BigDecimal bigDecimal = (BigDecimal) decimalFormat.parse("10,692,467,440,017.120");
System.out.println(bigDecimal);

If you are building an application with I18N support you should use DecimalFormatSymbols(Locale)

Also keep in mind that decimalFormat.parse can throw a ParseException so you need to handle it (with try/catch) or throw it and let another part of your program handle it

Mauricio Gracia Gutierrez
  • 10,288
  • 6
  • 68
  • 99
René Link
  • 48,224
  • 13
  • 108
  • 140
  • If the grouping and decimal separator are switched the above code will not work. It will work if DecimalFormat is initialized as it follows `DecimalFormat res = new DecimalFormat(); res.setDecimalFormatSymbols(symbols); res.applyLocalizedPattern(formatter);` – raisercostin Jan 18 '21 at 09:22
27

Try this

 String str="10,692,467,440,017.120".replaceAll(",","");
 BigDecimal bd=new BigDecimal(str);
Ruchira Gayan Ranaweera
  • 34,993
  • 17
  • 75
  • 115
17

Try the correct constructor http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#BigDecimal(java.lang.String)

You can directly instanciate the BigDecimal with the String ;)

Example:

BigDecimal bigDecimalValue= new BigDecimal("0.5");
Taner
  • 4,511
  • 3
  • 18
  • 14
Rene M.
  • 2,660
  • 15
  • 24
14

BigDecimal offers a string constructor. You'll need to strip all commas from the number, via via an regex or String filteredString=inString.replaceAll(",","").

You then simply call BigDecimal myBigD=new BigDecimal(filteredString);

You can also create a NumberFormat and call setParseBigDecimal(true). Then parse( will give you a BigDecimal without worrying about manually formatting.

nanofarad
  • 40,330
  • 4
  • 86
  • 117