First, you can follow this way to use Number.format().
Then, you can simply create BigDecimal with the double result.
After various exchange via comments, this is my final answer, allowing to control decimal separator, and grouping separator:
public static final BigDecimal convertToBigDecimal(String stringNumber1, String stringNumber2, char separator, char groupingSeparator)
throws ParseException {
Locale myLocale = Locale.FRANCE;
DecimalFormatSymbols decimalSeparator = new DecimalFormatSymbols(myLocale);
decimalSeparator.setDecimalSeparator(separator);
decimalSeparator.setGroupingSeparator(groupingSeparator);
DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance(myLocale);
format.setDecimalFormatSymbols(decimalSeparator);
Number number1 = format.parse(stringNumber1.trim());
Number number2 = format.parse(stringNumber2.trim());
double substractResult = number1.doubleValue() - number2.doubleValue();
// If you want back a String presentation => String stringFormat = "" +
// substractResult;
return new BigDecimal(substractResult);
}
This way you fully control locale and decimal separator as you wish.
If you want to use coma as default decimal separator, you can add this overload:
public final BigDecimal convertToBigDecimal(String stringNumber1, String stringNumber2)
throws ParseException {
return convertToBigDecimal(stringNumber1, stringNumber2, ',', '.');
}
public final BigDecimal convertToBigDecimal(String stringNumber1, String stringNumber2, char separator)
throws ParseException {
return convertToBigDecimal(stringNumber1, stringNumber2, separator, '.');
}
You can then easily use this new function
System.out.println(convertToBigDecimal("123,21", "22,41", ','));
System.out.println(convertToBigDecimal("123.21", "22.41", '.'));
System.out.println(convertToBigDecimal("123,441.33", "122,441.22", '.', ','));
System.out.println(convertToBigDecimal("59.998,50", "698,43", ',', '.'));
System.out.println(convertToBigDecimal("59.998,50", "49.998,50", ','));