Десятичный разделитель в NumberFormat - PullRequest
42 голосов
/ 17 января 2011

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

NumberFormat numberFormat = NumberFormat.getInstance();

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

Спасибо

Ответы [ 3 ]

76 голосов
/ 17 января 2011

Вспомогательный класс 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);

РЕДАКТИРОВАТЬ: этот ответ действителен только для DecimalFormat, но не для NumberFormat, как требуется в вопросе.Во всяком случае, как это может помочь автору, я позволю это здесь.

5 голосов
/ 17 января 2011

Я согласен с biziclop и Йоахимом Зауэром , что путаница с десятичным разделителем и группировка разделителей и выполнение этой работы вручную могут вызвать много проблем. Использование параметра locale в методе NumberFormat getInstance сделает всю работу за вас автоматически. И вы можете легко отключить разделитель тысяч, если хотите.

Следующий метод тестирования 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
}
2 голосов
/ 17 января 2011

Если ваш NumberFormat экземпляр является DecimalFormat, то вы можете использовать getDecimalFormatSymbols(), чтобы добраться до этого информация.

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

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

...