Ошибка String to Double Java - PullRequest
       28

Ошибка String to Double Java

1 голос
/ 03 августа 2011

У меня возникли некоторые проблемы при разборе String на Double с Spring и Java.Это не совсем относится к Spring, но может поставить вас в сложное положение.

У меня был CustomNumberEditor для удобного разбора строк на двойники.java.text.DecimalFormat использовался как десятичный формат для разбора double на строку.Тем не менее, когда вы делаете numberFormat.parse (stringDouble), если строка начинается с цифр и следует за буквами, возвращаемое значение - это числа.то есть 12a разбирается на 12. Для меня это ясно и ошибка, и я хотел бы легко решить эту проблему.

Я полагаю, это должно быть реализовано в каком-либо другом виде numberFormat или атрибутах или чем-то, но яне смог найти его.Есть идеи?

Ответы [ 3 ]

1 голос
/ 03 августа 2011

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

0 голосов
/ 03 августа 2011
try{
    double d = Double.parseDouble("12abc");
}
catch(NumberFormatException nfe){
    System.out.println("The string is not formatted correctly");
    //do something here if the string is bad

}

Как кто-то сказал выше, используйте Double.parseDouble (String s). Он выдаст исключение, если строка не отформатирована должным образом. Затем вы просто заключаете это в оператор try-catch и делаете все, что хотите, чтобы ваша программа делала в случае, если входные данные неправильно отформатированы.

0 голосов
/ 03 августа 2011

Метод parse(...) не будет использовать весь текст и, таким образом, разрешит "цифры", такие как 12a и т. Д. (Это также может быть валюта, такая как 12USD).

Ваш CustomNumberEditor может, однако, просто применить шаблон только числа к String#matches(...), чтобы проверить, что строка содержит только число перед его синтаксическим анализом - что-то вроде ^-?\d+\.?\d*$ (строка должна содержать только цифры, знак минус и разделитель). Однако следует отметить, что это зависит от локали и не так гибко, как шаблон десятичного формата.

...