Конвертировать строку, чтобы плавать в Java
Я пытаюсь разобрать строку с плавающей точкой с float.parsefloat()
метод, но это дает мне ошибку относительно формата.
int v_CurrentPosX = Math.round(Float.parseFloat(v_posString)); //where v_posString is the float that I want to convert in this case 5,828
И ошибка:
Исключение в потоке "main" java.lang.NumberFormatException: для входной строки: "5,828" в sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) в sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
4 ответа
Ваша проблема в том, что двоеточие (,) не является языком по умолчанию в JVM...
Вы можете использовать NumberFormat для этого, с правильным языком
String x = "5,828";
NumberFormat myNumForm = NumberFormat.getInstance(Locale.FRENCH);
double myParsedFrenchNumber = (double) myNumForm.parse(x);
System.out.println("D: " + myParsedFrenchNumber);
Попробуй это
NumberFormat.getNumberInstance(Locale.FRANCE).parse("5,828");
Float.parseFloat() не учитывает локаль и всегда ожидает '.' быть вашим разделителем десятичной точки. Вместо этого вы можете использовать DecimalFormat.
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
String str = "5,200";
DecimalFormat format = new DecimalFormat("0.#");
format.setDecimalFormatSymbols(symbols);
float f = format.parse(str).floatValue();
Попробуйте заменить запятую на точку перед разбором так:
v_posString = v_posString.replace(",",".");
int v_CurrentPosX = Math.round(Float.parseFloat(v_posString));
Проблема в том, что ваша локаль настроена на использование .
для поплавков, а не ,
,