Строка.формат использует запятую вместо точки

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

что здесь что-то не так?

5 ответов


преобразовать float в string..

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

строку.format (формат строки, объект... args)

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

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

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

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


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

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

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


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

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

посмотреть в NumberFormat дополнительные параметры форматирования


код format вызов на вкладке Galaxy использует некоторые по умолчанию Locale который в свою очередь использует , для поплавков. Вы могли бы использовать 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());

суммируя предыдущий ответ, простой способ иметь точку вместо запятой во всей стране, это:

myEditText.setText(Locale.CANADA, String.format("%.1f", fMyFloat));

и у вас будет строка, отформатированная с точкой