2013-01-07 78 views
1

我試圖在Java 1.6中調試涉及DecimalFormat#applyPattern(String)的問題。默認語言環境是法語,所以默認情況下小數點分隔符是','。但是,該模式指定應用'。'到似乎不是的十進制格式實例。我試圖調試到applyPattern(),但看不到變量值。我並不十分熟悉模式和reg-ex,所以我不確定問題是出在模式還是其他方面。它是不正確的模式還是代碼存在其他問題?Java中的DecimalFormat應用模式不覆蓋區域設置

這裏是代碼片段:

public class DecimalFormatTester 
{ 
    static private final DecimalFormat doubleFormat = (DecimalFormat) NumberFormat.getInstance(); 

    static 
    { 
     doubleFormat.applyPattern("############.00"); 
    } 

    public static String toString(double value) 
    { 
    synchronized (doubleFormat) 
    { 
     return doubleFormat.format(value); 
    } 
    } 
} 

這裏是Junit代碼採樣線,其失敗:

assertEquals("String values aren't equal", "2179005635.00", DecimalFormatTester.toString(2.179005635E9)); 
+0

和問題是什麼? –

+0

什麼是錯的?它是由於它失敗的模式嗎? –

+0

編輯一個問題而不是評論添加問題。 –

回答

3

在圖案############.00.是一個佔位符(目前設置)decimalCharacter。

如果你想.作爲decimalcharacter那麼你還必須設置 decimalCharacter,例如。通過設置Locale.US

您可以保存當前的區域設置,然後設置爲Locale.US,然後重新設置您的保存Locale, 但要確保你的應用程序是不是多線程。

你也可以使用

DecimalFormatSymbols.getInstance().setDecimalSeparator("."); 
+0

您是否打算在應用模式之前將Locale簡單地更改爲US,或者DecimalFormat中是否存在指定decimalCharacter的方法? –

+0

有一個方法setDecimalSymbols,但我從來沒有使用過,我會暫時設置語言環境爲美國,然後將其更改回 – AlexWien

+0

這在靜態塊中爲我工作:最終DecimalFormatSymbols dcs = doubleFormat.getDecimalFormatSymbols(); dcs.setDecimalSeparator('。'); doubleFormat.setDecimalFormatSymbols(dcs); –

0

在模式############.00的 ''代表您的語言環境的小數點分隔符。

在你的情況,我明白這是法國小數點分隔符,這是','。

1

更改apropiate輸出的語言環境。另一方面,您可以使用自定義DecimalFormatSymbols

###,###.###  123,456.789  en_US 
###,###.###  123.456,789  de_DE 
###,###.###  123 456,789  fr_FR 

見多Locale-Sensitive Formatting

+0

感謝您的鏈接,他們很有幫助。 –

相關問題