【发布时间】:2011-04-28 01:49:58
【问题描述】:
我正在实施一个模拟退火程序,其中一部分涉及从我的 java 程序读取的 .txt 文件中计算分数。
1) 从用户那里读取输入字符串。我的输入字符串越长,出现以下异常的可能性就越大
2) 计算的分数本质上是添加许多十进制数,我将其存储在一个“双”变量中。
有人可以告诉我为什么会发生这种异常吗?
Hill Swap 得分: 0.24874990000000005 交换后...线程“主”中的异常 java.lang.NumberFormatException:对于 输入字符串:“7.92066E-” 在 sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
非常感谢!
【问题讨论】:
-
双精度数有舍入错误(试试
0.01 + 0.09:不是0.1)。这使得双打不适合科学或财务计算。 Drools Planner 的模拟退火支持使用其他 Score 实现,例如BigDecimal(没有舍入误差但速度较慢)。
标签: java exception double simulated-annealing numberformatexception