2011-11-18 4 views

risposta

14

Credo di avere un modo. Non ho mai usato questo, si badi bene, ma dovrebbe certamente ottenere la chiusura, se non c'è:

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

Documenti:

NumberFormat, DecimalFormat, DecimalFormatSymbols

Secondo la documentazione DecimalFormat, apparentemente chiamare NumberFormat.getInstance() è sicuro, ma potrebbe restituire una sottoclasse diversa da DecimalFormat (l'altra opzione che vedo è ChoiceFormat). Credo che per la maggior parte dei casi dovrebbe essere un DecimalFormat, e quindi è possibile confrontare decSeparator con uno , e . per vedere quale formato sta usando.

+0

Grazie a questo funziona benissimo – patrick

+2

Avevo bisogno di trasmettere 'nf' a' DecimalFormat' '((DecimalFormat) nf) .getDecimalFormatSymbols()', grazie mille. –

+0

Grazie @ SelçukCihan, ho modificato la risposta per includere il cast richiesto! – kcoppock

-1

Non sono sicuro se esiste un modo semplice, ma è possibile verificare quale set di lingue è in uso e quindi apportare le modifiche appropriate in base a se la lingua utilizzata ha utilizzato virgole o decimali.

+0

separatore di decimali e lingua sono due diversi problemi. in aggiunta, è improbabile elencare tutta la lingua esistente. – Loda

1

Ho provato questo e ha funzionato bene ...

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

è possibile utilizzare:

Currency currency = Currency.getInstance(device_locale); 

che utilizzare currency.getSymbol() per il simbolo. Per impostazioni locali predefinite del dispositivo è possibile utilizzare:

@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; 
     } 
    }