Десятичный разделитель в NumberFormat
Учитывая локаль java.text.NumberFormat:
NumberFormat numberFormat = NumberFormat.getInstance();
Как я могу получить символ, используемый в качестве разделителя десятичных чисел (если он является запятой или точкой) в этом формате? Как изменить это свойство, не используя новый формат DecimalFormat (format)?
Спасибо
Ответы
Ответ 1
Вспомогательный класс DecimalFomatSymbols - это то, что вы ищете:
DecimalFormat format=DecimalFormat.getInstance();
DecimalFormatSymbols symbols=format.getDecimalFormatSymbols();
char sep=symbols.getDecimalSeparator();
Чтобы установить символы по мере необходимости:
//create a new instance
DecimalFormatSymbols custom=new DecimalFormatSymbols();
custom.setDecimalSeparator(',');
format.setDecimalFormatSymbols(custom);
EDIT: этот ответ действителен только для DecimalFormat
, а не для NumberFormat
, как требуется в вопросе. Во всяком случае, поскольку это может помочь автору, я позволю ему сюда.
Ответ 2
Я согласен с biziclop и Joachim Sauer в том, что возиться с разделителями десятичной и групповой группировки и делать это вручную, может вызвать массу проблем. Использование параметра locale в методе get1stance NumberFormat
делает всю работу за вас автоматически. И вы можете легко отключить тысячу разделителей групп, если хотите.
Следующий метод тестирования junit (который проходит) показывает это поведение на основе английского и немецкого языков.
public void testFormatter() {
DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance(Locale.UK);
assertEquals('.', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true
formatter = (DecimalFormat) DecimalFormat.getInstance(Locale.GERMAN);
assertEquals(',', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true
//and in case you want another decimal seperator for a specific locale
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
formatter.setDecimalFormatSymbols(decimalFormatSymbols);
assertEquals('.', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true
}
Ответ 3
Если ваш NumberFormat
экземпляр DecimalFormat
, вы можете использовать getDecimalFormatSymbols()
, чтобы получить эту информацию.
В общем, вы не можете получить эту информацию.
Зачем вам это нужно?