Safe String to BigDecimal conversion Safe String to BigDecimal conversion java java

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);    }}