Android - Как разобрать строку в число с запятой или точкой в ​​качестве десятичного разделителя - PullRequest
0 голосов
/ 28 марта 2012

Мне нужна функция, которая может анализировать как 1123.12, так и 1.123, 12 и 1123.12. Есть 3 источника для номеров, которые я использую, 1 всегда будет в формате США, 1 всегда будет в PT_BR (1.123,12), а третий может быть в любом формате в зависимости от локали устройства, как я могу правильно проанализировать все из них?

Редактировать: я не знаю, каким образом форматируется число, мне нужна функция, которая может принимать любой из этих форматов и анализировать его правильно. Возможно, мне нужен способ проверить, в каком формате находится строка, представляющая число. Что-то, что получит «1.123,12» и скажет, что это «PT_BR», получит 1,123.12 и скажет, что это «США». Но я понятия не имею, как это сделать, особенно, как сделать что-то подобное этому воку для любого места.

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

США:

NumberFormat nf = NumberFormat.getInstance(Locale.US);
Number number = nf.parse("1,123.12");

Бразильский португальский:

NumberFormat nf = NumberFormat.getInstance(Locale.forLanguageTag("pt-BR"));
Number number = nf.parse("1.123,12");

Язык по умолчанию:

NumberFormat nf = NumberFormat.getInstance();
Number number = nf.parse("1123.12");
0 голосов
/ 29 марта 2012

Вы можете получить только локаль окружающей среды.В контексте строки не существует ничего похожего на локаль, это полная противоположность: значение строки зависит от локали .Есть случаи, когда вы можете угадать число, представленное строкой (например, те, которые вы опубликовали), но как быть с 123 456, например?Это неоднозначно, поэтому ни одна библиотека не может сделать эту работу.Очевидно, что если вы наложите какое-либо ограничение (например, число должно состоять из двух десятичных цифр), вы сможете легко написать свой собственный анализатор, но без таких соглашений это просто невозможно

...