Safe String to BigDecimal conversion
Check out setParseBigDecimal
in DecimalFormat. With this setter, parse
will return a BigDecimal for you.
String value = "1,000,000,000.999999999999999";BigDecimal money = new BigDecimal(value.replaceAll(",", ""));System.out.println(money);
Full code to prove that no NumberFormatException
is thrown:
import java.math.BigDecimal;public class Tester { public static void main(String[] args) { // TODO Auto-generated method stub String value = "1,000,000,000.999999999999999"; BigDecimal money = new BigDecimal(value.replaceAll(",", "")); System.out.println(money); }}
Output
1000000000.999999999999999
The following sample code works well (locale need to be obtained dynamically)
import java.math.BigDecimal;import java.text.NumberFormat;import java.text.DecimalFormat;import java.text.ParsePosition;import java.util.Locale;class TestBigDecimal { public static void main(String[] args) { String str = "0,00"; Locale in_ID = new Locale("in","ID"); //Locale in_ID = new Locale("en","US"); DecimalFormat nf = (DecimalFormat)NumberFormat.getInstance(in_ID); nf.setParseBigDecimal(true); BigDecimal bd = (BigDecimal)nf.parse(str, new ParsePosition(0)); System.out.println("bd value : " + bd); }}