Java локализация форматирования чисел

Java использует период в десятичных дробях, например. 1/2 = 0,5

Есть ли способ заставить его использовать запятую, например, 1/2 = 0,5? И не использовать запятую для тысяч (например, сто тысяч = 100 000), а вместо этого использовать пробел (100 000)?

Когда дело доходит до вывода, я полагаю, что мог бы использовать все виды функций форматирования строк, но проблема заключается в вводе (JTable). Некоторые столбцы требуют двойного формата, поэтому пользователи должны вводить что-то вроде 45,5, а в этих частях они привыкли к 45,5 :) Заранее спасибо.

Обновление:

Я попытался использовать myTable.setDefaultLocale(Locale.Germany); но это не сработало. Я также сделал Locale.setDefault(Locale.Germany); @ основная функция, и она работала, но довольно глупо: пока ячейка находится в режиме редактирования, вы должны ввести точку как обычно, то есть 45,5, но после нажатия Enter для подтверждения изменений она отображается как запятая : 45,5. Я имею в виду, что он использует запятую только для целей отображения, но при редактировании это все та же старая точка.

Есть ли способ исправить это без написания пользовательской модели таблицы?


person Sejanus    schedule 16.01.2010    source источник


Ответы (3)


По сути, вы хотите преобразовать локализованное представление String предположительно в числовом формате в Number/BigDecimal и наоборот?

У вас есть java.text.DecimalFormat для. Чтобы узнать больше, обратитесь к собственному руководству Sun о тема.

Чтобы локализовать приложение Swing, используйте JComponent#setDefaultLocale(). Например.

JComponent.setDefaultLocale(Locale.GERMANY);
person BalusC    schedule 16.01.2010
comment
Проблема с этим решением заключается в том, что мой столбец таблицы принимает только значения Double, а стиль Double Java означает форматирование чисел США/Канады. Я мог бы заставить его принимать String вместо Double, а затем анализировать/проверять его вручную, но нет ли более простого решения? Что-то вроде SetGlobalLocale(Locale.German); и вдруг Java знает, что 12,20 является допустимым значением Double, поэтому мне не нужно ничего менять в моей таблице... что-то в этом роде? :) - person Sejanus; 16.01.2010
comment
Я вижу, вы используете Swing. Я обновил свой ответ (и теги этого вопроса). - person BalusC; 16.01.2010
comment
Большое спасибо, я думаю, это то, что мне нужно! До сих пор у меня это работало, своего рода, это намного лучше, чем ничего, но что-то все еще не совсем правильно. Я обновил исходный вопрос, если у вас есть время посмотреть на него. - person Sejanus; 16.01.2010

Взгляните на Форматирование и анализ числа для локали:

// Format for CANADA locale
Locale locale = Locale.CANADA;
String string = NumberFormat.getNumberInstance(locale).format(-1234.56); // -1,234.56

// Format for GERMAN locale
locale = Locale.GERMAN;
string = NumberFormat.getNumberInstance(locale).format(-1234.56); // -1.234,56

// Format for the default locale
string = NumberFormat.getNumberInstance().format(-1234.56);


// Parse a GERMAN number
try {
    Number number = NumberFormat.getNumberInstance(locale.GERMAN).parse("-1.234,56");
    if (number instanceof Long) {
        // Long value
    } else {
        // Double value
    }
} catch (ParseException e) {
}
person cletus    schedule 16.01.2010

Для правильной обработки ввода вы можете реализовать собственную TableModel и перезаписать метод setValueAt.

person Oleg Ryaboy    schedule 16.01.2010