Форматирование чисел всегда зависит от локали.Поэтому необходима определенная локаль.Для форматирования будет работать следующий подход:
BigDecimal money = new BigDecimal("1234567");
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.GERMAN);
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('.');
// https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html
DecimalFormat format = new DecimalFormat("###,###.00");
format.setDecimalFormatSymbols(symbols);
System.out.println(format.format(money));
Однако это не отвечает требованию разбирать любое заданное число как десятичное с двумя цифрами.Здесь я бы лично применил деление на 100 или вставил десятичный разделитель в данную строку.
BigDecimal money = new BigDecimal("1234567").divide(new BigDecimal("100"));
Вставка определенного десятичного разделителя может работать следующим образом:
private static String prepare(String input) {
if (input.length() == 2) {
return ","+input;
}
if (input.length() == 1) {
return ",0"+input;
}
String integerPart = input.substring(0, input.length()-2);
String fraction = input.substring(input.length()-2);
return integerPart+","+fraction;
}
Используя новый DecimalFormat и метод prepare()
, он будет работать для анализа строки как числа с двумя десятичными знаками по умолчанию.
String input = "1234567";
String prepared = prepare(input);
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.GERMAN);
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('.');
DecimalFormat format = new DecimalFormat("###,###.00");
format.setDecimalFormatSymbols(symbols);
format.setParseBigDecimal(true);
BigDecimal bigDecimal = (BigDecimal)format.parse(prepared);
String n = format.format(bigDecimal);
System.out.println(n);