2010-01-16 98 views
4

Java使用小数点后的句点,例如1/2 = 0.5Java本地化数字格式化

有什么办法让它使用逗号代替,如1/2 = 0.5?千万不要使用逗号(如十万= 100,000),而是使用空格(10万)?

当谈到输出我想我可以使用各种字符串格式函数,但问题是输入(JTable)。一些列需要双格式,因此用户必须像45.5输入一些东西,在这些地区,他们被用来45.5 :)在此先感谢

更新:

我尝试使用myTable.setDefaultLocale(Locale.Germany );但它没有工作。我也做了Locale.setDefault(Locale.Germany); @主要功能和它的工作,但很愚蠢的方式:当单元格处于编辑模式,你必须输入正常的点,即45.5但你敲回车确认更改,它显示为逗号:45,5。我的意思是它只使用逗号作为显示目的,但是在编辑它仍然相同的ol点时。

有没有办法修复它没有写自定义表模型?

回答

2

因此,你基本上要 据称转换一个 本地化 String表示以数字格式转换成 Number/BigDecimal,反之亦然?

在那里你有 java.text.DecimalFormat的。要了解更多信息,请咨询 Sun's own tutorial

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

JComponent.setDefaultLocale(Locale.GERMANY); 
+0

此解决方案的问题是我的表列只接受Double值,而Double Java样式表示美国/加拿大数字格式。我可以让它接受String而不是Double,然后手动解析/验证它,但是没有更简单的解决方案吗?像SetGlobalLocale(Locale.German);突然Java知道12,20是一个有效的Double值,所以我不需要改变我的表中的任何东西......类似的东西? :) – Sejanus 2010-01-16 03:26:41

+0

我明白了,你正在使用Swing。我更新了我的答案(以及这个问题的标签)。 – BalusC 2010-01-16 03:53:24

+0

非常感谢,我相信这就是我需要的!到目前为止,我得到它的工作,各种各样,它远胜于没有,但有些东西仍然不完全正确。我更新了原始问题,如果你有一些时间来看看它 – Sejanus 2010-01-16 08:34:21

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

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