Десятичная точка или десятичная запятая в Android - PullRequest
14 голосов
/ 18 ноября 2011

Существует ли простой способ считывания, если в языковом наборе используется десятичная запятая или десятичная точка?

Ответы [ 5 ]

21 голосов
/ 18 ноября 2011

РЕДАКТИРОВАТЬ: Обновление на основе предложения @ Алгар; Вы можете напрямую использовать:

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

Поскольку он всегда будет возвращать экземпляр DecimalFormatSymbols.


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

Документы:

NumberFormat, DecimalFormat, DecimalFormatSymbols

Согласно документам DecimalFormat, очевидно, что вызов NumberFormat.getInstance () безопасен, но может возвращать подкласс, отличный от DecimalFormat (другой вариант, который я вижу, - ChoiceFormat). Я считаю, что для большинства случаев это должен быть десятичный формат, и тогда вы можете сравнить decSeparator с , и ., чтобы увидеть, какой формат он использует.

2 голосов
/ 23 декабря 2011

Я попробовал это, и все работало нормально ...

    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 голос
/ 30 сентября 2018

Или почему бы не

DecimalFormatSymbols.getInstance().decimalSeparator
1 голос
/ 02 августа 2017

вы можете использовать:

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;
        }
    }
0 голосов
/ 18 ноября 2011

Не уверен, что существует простой способ, но вы можете проверить, какой языковой набор используется, а затем внести соответствующие изменения в зависимости от того, использует ли этот язык запятые или десятичные дроби.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...