Десятичная запятая или десятичная запятая в Android

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

Ответ 1

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

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

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


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

Docs:

NumberFormat, DecimalFormat, DecimalFormatSymbols

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

Ответ 2

Я попробовал это, и он отлично работал...

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

Ответ 3

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

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

Ответ 4

Или почему нет

DecimalFormatSymbols.getInstance().decimalSeparator

Ответ 5

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