C'è un modo semplice per rileggere se la lingua impostata utilizza una virgola decimale o un punto decimale?virgola decimale o virgola decimale in Android
risposta
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.
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.
separatore di decimali e lingua sono due diversi problemi. in aggiunta, è improbabile elencare tutta la lingua esistente. – Loda
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);
è 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;
}
}
Grazie a questo funziona benissimo – patrick
Avevo bisogno di trasmettere 'nf' a' DecimalFormat' '((DecimalFormat) nf) .getDecimalFormatSymbols()', grazie mille. –
Grazie @ SelçukCihan, ho modificato la risposta per includere il cast richiesto! – kcoppock