#java #exception #double #simulated-annealing #numberformatexception
#java #исключение #двойной #имитация отжига #исключение numberformatexception
Вопрос:
Я работаю над реализацией программы имитации отжига, и часть этого включает в себя вычисление оценок из файла .txt, который считывает моя Java-программа.
1) строка ввода считывается от пользователя. Чем длиннее моя строка ввода, тем больше вероятность возникновения следующего исключения ниже
2) вычисляемая оценка, по сути, добавляет много десятичных чисел, и я сохраняю ее в переменной ‘double’.
Может кто-нибудь, пожалуйста, посоветовать мне, почему может возникнуть такое исключение?
Оценка при замене Hill: 0.24874990000000005 после замены… Исключение в потоке «main» java.lang.NumberFormatException: Для входной строки: «7.92066E-» в sun.разное.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
Большое спасибо!
Комментарии:
1. У двойников есть ошибки округления (просто попробуйте
0.01 0.09
: это не0.1
). Это делает doubles непригодными для научных или финансовых вычислений. Имитация отжига в Drools Planner поддерживает использование альтернативных реализаций оценки, таких какBigDecimal
(который не имеет ошибок округления, но работает медленнее).
Ответ №1:
Это означает, что ваша программа пытается проанализировать строку «7.92066E-«, которая не может быть проанализирована как Double.
Вы должны проверить, откуда берется эта строка (остальная часть трассировки стека должна сообщить вам), и убедиться, что вы не получаете недопустимые данные где-то по ходу строки.
Комментарии:
1. Оно недопустимо, потому что вы пропускаете число после E. Это должно быть что-то вроде 7.92066E042-
2. большое спасибо, ваши ответы действительно правильные, в моем файле данных есть числа типа 7.92066E-5. это вызывает проблему, поскольку я преждевременно останавливаю чтение. теперь проблема будет исправлена. Спасибо!