-1

Я пытаюсь разобрать поплавок при использовании DecimalMormat twoDForm, чтобы уменьшить число десятичных знаков. Чтобы установить количество знаков после запятой я экземплярам следующим образом:DecimalFormat усиливает латинские номера, когда пользователи имеют разные локали

twoDForm = new DecimalFormat("#.##"); 

Затем разобрать поплавок я называю следующее:

Float.valueOf(twoDForm.format(cameraPosition.x) 

, которые в некоторых случаях, казалось бы, на основе локали бросает

NumberFormatException: Invalid float: "١٥.٨٦" non latin numbers or font 

У меня возникло несколько различных проблем с NumberFormatException из-за локалей и различий в том, как устройства Android обрабатывают номера и символы Л.С, поэтому я также добавил следующее к DecimalFormat:

DecimalFormatSymbols dfs = new DecimalFormatSymbols(); 
dfs.setDecimalSeparator('.'); 
dfs.setMinusSign('-'); 
twoDForm.setDecimalFormatSymbols(dfs); 

Я был в состоянии решить те, которые включают некоторые случаи с использованием различных видов запятых, и знак минус, но теперь я столкнулся с this: java.lang.NumberFormatException: Invalid float: "15.86"

Когда я нахожусь в google, я нахожу арабские книги, поэтому я предполагаю, что это другой способ обработки чисел для разных языков. Есть ли способ заставить это использовать «обычные» номера, чтобы избежать этого, что позволило бы мне просто вызвать тот же Float.valueOf (...), не добавляя конкретные локали для каждого возможного случая?

Спасибо!

+1

Что вы делаете с этим текстом, который дает исключение? Какую команду вы вызываете? –

+1

Просто примечание в случае, если в вопросе неясно - эти символы являются арабскими цифрами. –

+1

Является ли '.' регулярным периодом? –

ответ

2

Символы в этой строке являются арабскими цифрами для 1, 5, 8 и 6. Для анализа их вам понадобится арабскоязычная локали.

Следующий код работает для меня и распечатывает 15.86 при необходимости.

Locale saudiArabia = new Locale("ar", "SA"); 
NumberFormat arabicFormat = NumberFormat.getInstance(saudiArabia); 
try { 
    Number parsed = arabicFormat.parse("١٥.٨٦"); 
    System.out.println(parsed); 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 
+0

Отлично, спасибо! Я отредактировал свой вопрос, чтобы уточнить, можете ли вы посмотреть на него? Был бы какой-нибудь способ, которым я мог бы просто объяснить любой тип языкового стандарта, а затем проанализировать строку из DecimalFormat? Проблема в том, что у меня есть пользователи по всему миру, и я не буду знать, какой язык они используют. – simernes

+0

Ну, вы не должны сильно менять вопрос, как только люди начинают отвечать - это аннулирует их ответы. Помните, что переполнение стека не только для вас. Другие люди получат этот вопрос отсюда. Но что в стороне, почему вы используете 'DecimalFormat' для преобразования числа в' String', затем 'Float.valueOf', чтобы преобразовать его обратно в число? Разве вы не можете оставить его как число и избежать всех этих проблем? –

+0

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

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

  • Нет связанных вопросов^_^