2010-01-16 95 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方法。