Конвертировать строку, чтобы плавать в 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));

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

Другие вопросы по тегам