Подтвердить что ты не робот

Десятичный разделитель в NumberFormat

Учитывая локаль java.text.NumberFormat:

NumberFormat numberFormat = NumberFormat.getInstance();

Как я могу получить символ, используемый в качестве разделителя десятичных чисел (если он является запятой или точкой) в этом формате? Как изменить это свойство, не используя новый формат DecimalFormat (format)?

Спасибо

4b9b3361

Ответ 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(), чтобы получить эту информацию.

В общем, вы не можете получить эту информацию.

Зачем вам это нужно?