String.format использует запятую вместо точки

Мое приложение работает на многих устройствах без проблем. Но теперь я получил свою новую Galaxy Tab с Android 3.2, где он постоянно падает. Я узнал, что проблема была плавающей в EditText. Я использую myEditText.setText(String.format("%.1f", fMyFloat)); Чтобы поместить float в EditText. Но каким-то образом float на моей 3.2 Galaxy Tab генерируется с запятой, а не точкой. Когда я прочитал EditText, приложение, конечно, аварийно, сообщив мне, что это не допустимый float из-за запятой …

Что здесь происходит?

Solutions Collecting From Web of "String.format использует запятую вместо точки"

Преобразовать float в строку.

Из документации String.format :

String.format (String format, Object … args)

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

Вышеупомянутый текст означает, что вывод String.format будет соответствовать String.format по умолчанию, который использует пользователь.

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

Если вы хотите принудительно использовать язык, используйте перегрузку String.format которая принимает три параметра:

  • String.format (локаль локали, строковый формат, объект … args)

Преобразуйте строку в float ..

Разбор произвольной строки в float с использованием локали по умолчанию довольно прост, все, что вам нужно сделать, это использовать DecimalFormat.parse .

Затем используйте .parse чтобы получить Number и вызвать floatValue на этом возвращенном объекте.

String.format использует локаль, в которой вы находитесь. Вы должны сделать что-то вроде этого, если хотите точку:

 NumberFormat formatter = NumberFormat.getInstance(Locale.US); myEditText.setText(formatter.format(fMyFloat); 

Посмотрите на NumberFormat для получения дополнительных параметров форматирования.

В вашем format на вкладке Galaxy используется определенный по умолчанию Locale который, в свою очередь, использует для float. Вы можете использовать String.format(Locale,String,...) с определенным языковым стандартом, чтобы заставить все работать.

Или вы должны использовать ту же локаль как для синтаксического анализа, так и для форматирования числа. Поэтому вам следует, вероятно, пойти с NumberFormat для форматирования и анализа ваших поплавков.

Используйте ниже код, он работает для меня:

 NumberFormat nf = NumberFormat.getNumberInstance(Locale.US); DecimalFormat df = (DecimalFormat)nf; df.applyPattern(pattern); String output = df.format(value); System.out.println(pattern + " " + output + " " + loc.toString());