Есть ли простой способ для чтения, если набор языков использует десятичную запятую или десятичную точку?
Десятичная запятая или десятичная запятая в 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
Не уверен, что есть простой способ, но вы можете проверить, какой набор языков используется, а затем внести соответствующие изменения в зависимости от того, используются ли эти запятые или десятичные числа.