Java本地化数字格式

时间:2010-01-16 03:00:41

标签: java swing localization number-formatting

Java使用小数周期,例如1/2 = 0.5

有没有办法让它改为使用逗号,如1/2 = 0,5?而不是使用逗号成千上万(如十万= 100,000),而是使用空格(100 000)?

说到输出,我想我可以使用各种字符串格式函数,但问题是输入(JTable)。有些列需要Double格式,因此用户必须输入类似45.5的内容,并且在这些部分中它们用于45,5 :)提前感谢

更新

我尝试使用myTable.setDefaultLocale(Locale.Germany);但它没有用。我也做了Locale.setDefault(Locale.Germany); @ main函数它确实工作但是很傻:当单元格处于编辑模式时,你必须正常输入点数,即45.5但是 后按Enter键确认更改,它显示为逗号:45,5。我的意思是它只使用逗号用于显示目的,但是当编辑它仍然是相同的ol'点。

有没有办法解决它没有编写自定义表模型?

3 个答案:

答案 0 :(得分:5)

看看Formatting and Parsing a Number for a Locale

// 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) {
}

答案 1 :(得分:2)

因此,您基本上希望本地化的 String表示形式转换为Number/BigDecimal,反之亦然?

<击>

你有java.text.DecimalFormat。要了解更多信息,请参阅Sun's own tutorial有关该主题的信息。

要本地化您的Swing应用程序,请使用JComponent#setDefaultLocale()。 E.g。

JComponent.setDefaultLocale(Locale.GERMANY);

答案 2 :(得分:1)

要正确处理输入,您可以实现自己的TableModel并覆盖setValueAt方法。