2011-11-18 14 views

Odpowiedz

14

Wierzę, że mam sposób. Nigdy nie korzystałem z tego, uważasz, ale na pewno powinno się zamknąć, jeśli nie istnieją:

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

Docs:

NumberFormat, DecimalFormat, DecimalFormatSymbols

Zgodnie z docs DecimalFormat, pozornie wywołanie NumberFormat.getInstance() jest bezpieczne, ale może zwrócić podklasę inną niż DecimalFormat (inną opcją którą widzę jest ChoiceFormat). Uważam, że w większości przypadków powinien to być DecimalFormat, a następnie można porównać decSeparator z , i ., aby zobaczyć, jakiego formatu używa.

+0

Dzięki temu działa świetnie – patrick

+2

Musiałem rzucić 'nf' na' DecimalFormat' '((DecimalFormat) nf) .getDecimalFormatSymbols()', wielkie dzięki. –

+0

Dzięki @ SelçukCihan, zredagowałem odpowiedź, aby dołączyć wymaganą obsadę! – kcoppock

-1

Nie jesteś pewien, czy jest łatwy sposób, ale możesz sprawdzić, który zestaw językowy jest używany, a następnie wprowadzić odpowiednie zmiany w zależności od tego, czy w tym języku użyto przecinków czy miejsc dziesiętnych.

+0

Język i separator dziesiętny to dwa różne problemy. w dodatku nie jest prawdopodobne, aby lista wszystkich istniejących języków. – Loda

1

Próbowałem to i to działało dobrze ...

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

można użyć:

Currency currency = Currency.getInstance(device_locale); 

niż używać currency.getSymbol() dla symbolu. Domyślne ustawienia regionalne urządzenia:

@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; 
     } 
    } 
Powiązane problemy