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

Я работаю над реализацией программы имитации отжига, и часть этого включает в себя вычисление оценок из файла .txt, который читает моя программа Java.

1) от пользователя считывается входная строка. Чем длиннее моя входная строка, тем вероятнее следующее исключение ниже

2) вычисляемая оценка, по сути, добавляет много десятичных чисел, и я сохраняю ее в «двойной» переменной.

Может кто-нибудь, пожалуйста, сообщите мне, почему такое исключение может произойти?

Оценка от Hill Swap: 0,24874990000000005 После подкачки... Исключение в потоке "main" java.lang.NumberFormatException: Для входной строки: "7.92066E-" в sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)

Спасибо большое!


person Roy    schedule 28.04.2011    source источник
comment
Двойники имеют ошибки округления (просто попробуйте 0.01 + 0.09: это не 0.1). Это делает удвоения непригодными для научных или финансовых расчетов. Моделирование отжига в Drools Planner поддерживает использование альтернативных реализаций Score, таких как BigDecimal (который не имеет ошибок округления, но работает медленнее).   -  person Geoffrey De Smet    schedule 28.04.2011


Ответы (1)


Это означает, что ваша программа пытается проанализировать строку «7.92066E-», которая не может быть проанализирована как двойная.

Вы должны проверить, откуда берется эта строка (остальная часть трассировки стека должна сказать вам), и убедиться, что вы не получаете неверные данные где-то по ходу строки.

person Cameron Skinner    schedule 28.04.2011
comment
Это недействительно, потому что вам не хватает числа после E. Это должно быть что-то вроде 7.92066E042- - person James Anderson; 28.04.2011
comment
большое спасибо, ваши ответы действительно правильные, в моем файле данных есть числа типа 7.92066E-5. это вызывает проблему, так как я преждевременно прекращаю чтение. теперь проблема будет исправлена. Спасибо! - person Roy; 28.04.2011