2012-03-28 2 views
0

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

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

+0

может быть numberformat может помочь! http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html – dm03514

+0

numberformat не может помочь, потому что я не знаю, в каком формате я получаю номер. – user1003997

+0

Я использую: NumberFormat nf = NumberFormat.getInstance(); nf.parse (строка); – user1003997

ответ

0

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

+0

Я добирался до этого вывода, прежде чем я прочитал ваш ответ. Мне нужно будет отформатировать каждое число, как оно исходит от источников, в этот момент я знаю, какой формат он есть. Это будет долгий день! – user1003997

1

США:

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

Но я не знаю, откуда они. Если ваша функция в США получит 1.123,12, это не сработает. Есть ли способ узнать, что такое локаль строки? – user1003997

+0

@Jack Отличный ответ, спасибо! –

Смежные вопросы