BigDecimal не соответствует настройкам Locale.
Locale.getDefault(); //returns sl_SI
Словенский язык должен иметь десятичную запятую. Похоже, у меня были странные заблуждения относительно чисел.
a = new BigDecimal("1,2") //throws exception
a = new BigDecimal("1.2") //is ok
a.toPlainString() // returns "1.2" always
Я отредактировал часть моего сообщения, которое не имело смысла, так как оно оказалось из-за человеческой ошибки (забыл зафиксировать данные и искал не ту вещь).
То же, что и BigDecimal, можно сказать для любых функций Java .toString (). Я думаю, это хорошо в некоторых отношениях. Сериализация например или отладка. Существует уникальное строковое представление.
Также как и другие, упомянутые с использованием форматеров, работает нормально. Просто используйте форматтеры, то же самое для внешнего интерфейса JSF, форматировщики делают работу правильно и знают язык.