【问题标题】:What does this exception mean?这个例外是什么意思?
【发布时间】: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


【解决方案1】:

这意味着您的程序正在尝试解析字符串“7.92066E-”,该字符串无法解析为 Double。

您应该检查这个字符串的来源(堆栈跟踪的其余部分应该会告诉您)并确保您没有在沿线的某个地方获得无效数据。

【讨论】:

  • 它无效,因为您在 E 之后缺少一个数字。它应该类似于 7.92066E042-
  • 非常感谢,您的回答确实是对的,我的数据文件中有7.92066E-5类型的数字。这导致了问题,因为我过早地停止了读取。问题现在将得到解决。谢谢!
猜你喜欢
  • 2021-09-15
  • 1970-01-01
  • 2011-04-11
  • 2018-10-29
  • 1970-01-01
  • 2016-02-19
  • 2017-05-25
  • 2010-10-03
  • 1970-01-01
相关资源
最近更新 更多