2011-11-18 130 views

回答

14

,我相信我有辦法。我從來沒有用過這個,你要知道,但肯定應該讓你關閉,如果不是有:

NumberFormat nf = NumberFormat.getInstance(); 
if (nf instanceof DecimalFormat) { 
    DecimalFormatSymbols sym = ((DecimalFormat) nf).getDecimalFormatSymbols(); 
    char decSeparator = sym.getDecimalSeparator(); 
} 

文檔:

NumberFormatDecimalFormatDecimalFormatSymbols

根據DecimalFormat的文檔,顯然調用NumberFormat.getInstance()是安全的,但可能會返回DecimalFormat以外的子類(我看到的另一個選項是ChoiceFormat)。我相信大多數情況下它應該是一個DecimalFormat,然後你就可以比較decSeparator針對,.看到它正在使用的格式。

+0

感謝這個偉大工程 – patrick

+2

我需要投'nf'到''DecimalFormat'((DecimalFormat的)NF).getDecimalFormatSymbols()',非常感謝。 –

+0

謝謝@SelçukChan,我編輯了答案,包括必要的演員! – kcoppock

-1

不知道是否有一個簡單的方法,但你可以測試正在使用的語言集,然後根據如果語言使用逗號或小數,以做出相應的改變。

+0

語言和小數點分隔符是兩個不同的問題。另外,你不能列出所有現有的語言。 – Loda

1

我曾嘗試這一點,它工作得很好......

String osVersion = System.getProperty("os.version"); 
String PhoneModel = android.os.Build.MODEL; 
String locale = this.getResources().getConfiguration().locale.getDisplayCountry(); 
char decSeparator = '*'; 
DecimalFormatSymbols dfs = new DecimalFormatSymbols(); 
decSeparator = dfs.getDecimalSeparator(); 
String androidVersion = android.os.Build.VERSION.RELEASE; 
String prologue = String.format("OS verson = %s PhoneModel = %s locale = %s DecimalFormatSymbol = [%c] androidVersion = %s ", 
     osVersion ,PhoneModel, locale, decSeparator,androidVersion); 
1

你可以使用:

Currency currency = Currency.getInstance(device_locale); 

不是使用currency.getSymbol()的象徵。對於默認設備語言環境,您可以使用:

@TargetApi(Build.VERSION_CODES.N) 
    public static Locale getCurrentLocale(Context c) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
      return c.getResources().getConfiguration().getLocales().get(0); 
     } else { 
      //noinspection deprecation 
      return c.getResources().getConfiguration().locale; 
     } 
    } 
相關問題