我正在重写一个旧的Java 6程序,该程序编写为在Java 8中执行一些科学计算,并陷入这种情况,在这种情况下,四舍五入操作会得到不同的结果。
Java 6正在将输入四舍五入0.499999999999999999994
,1
而Java 8正在进行输入0
。我在这里无法理解问题。
例如:
private void foo() {
System.out.println(Math.round(0.499999999999999999994));
}
对于不同的Java版本,以上代码的行为有所不同。
如果有人可以阐明这个问题,那就太好了。
我认为您偶然发现了一个已知错误,Java 6
该错误后来在Java 7中得到了修复。这解释了Java 6
and中奇怪的代码行为Java 8
。
错误信息:
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6430675
更多信息和@OliverCharlesworth的精美解释可以在这篇文章中找到:
为什么Math.round(0.49999999999999994)返回1
摘录自他的帖子:
在Java 6(可能是更早的版本)中,round(x)被实现为floor(x + 0.5)。对于这种病理情况,这是一个规范错误。Java 7不再要求这种中断的实现。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句