Java локализующее форматирование чисел - PullRequest
4 голосов
/ 16 января 2010

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

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

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

Обновление:

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

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

Ответы [ 3 ]

5 голосов
/ 16 января 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) {
}
2 голосов
/ 16 января 2010

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

Там у вас есть java.text.DecimalFormat для. Чтобы узнать больше, обратитесь к Самому учебному пособию Sun по этому вопросу.

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

JComponent.setDefaultLocale(Locale.GERMANY);
1 голос
/ 16 января 2010

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

...