25 Stimmen

Dezimalpunkt oder Dezimalkomma in Android

Gibt es eine einfache Möglichkeit, zurückzulesen, ob die eingestellte Sprache ein Dezimalkomma oder einen Dezimalpunkt verwendet?

35voto

Kevin Coppock Punkte 131486

EDIT: Aktualisierung aufgrund des Vorschlags von @Algar; Sie können direkt verwenden:

char separatorChar = DecimalFormatSymbols.getInstance().getDecimalSeparator();

Da es immer eine Instanz von DecimalFormatSymbols .


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

Dokumente:

NumberFormat , DecimalFormat , DecimalFormatSymbols

Nach der DecimalFormat-Dokumente, anscheinend Aufruf NumberFormat.getInstance() ist sicher, aber kann eine andere Unterklasse als DecimalFormat zurückgeben (die andere Option, die ich sehe ist ChoiceFormat). Ich glaube, für die Mehrheit der Instanzen sollte es ein DecimalFormat sein, und dann können Sie vergleichen decSeparator gegen eine , y . um zu sehen, welches Format er verwendet.

7voto

Algar Punkte 5295

Oder warum nicht

DecimalFormatSymbols.getInstance().decimalSeparator

2voto

user462990 Punkte 5328

Ich habe das ausprobiert und es hat gut funktioniert...

    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);

1voto

Milos Simic Simo Punkte 149

Können Sie verwenden:

Currency currency = Currency.getInstance(device_locale);

als verwenden currency.getSymbol() für das Symbol. Als Standard-Locale für das Gerät können Sie verwenden:

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

-1voto

prolink007 Punkte 32400

Ich bin mir nicht sicher, ob es einen einfachen Weg gibt, aber Sie könnten testen, welcher Sprachensatz verwendet wird, und dann die entsprechenden Änderungen vornehmen, je nachdem, ob diese Sprache Kommas oder Dezimalstellen verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X