Что означает это исключение?

#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. это вызывает проблему, поскольку я преждевременно останавливаю чтение. теперь проблема будет исправлена. Спасибо!