Java 6 和 Java 8 之间的 Java BigDecimal.doubleValue

Posted

技术标签:

【中文标题】Java 6 和 Java 8 之间的 Java BigDecimal.doubleValue【英文标题】:Java BigDecimal.doubleValue between Java 6 and Java 8 【发布时间】:2015-04-27 19:40:47 【问题描述】:

案例1:Java6 BigDecimal("0.0050000").doubleValue() 返回0.0050,Java 8返回值为0.005

案例 2:在 Java6 BigDecimal("0.0250000").doubleValue() 中返回 0.025,在 Java 8 中返回值为 0.025

情况 1:Java 6 返回时带有额外的尾随零。知道吗?还有如何使 Java 8 返回与 Java 6 相同的输出

【问题讨论】:

如何打印/可视化返回的双精度值? doubleValue() 返回double,而不是字符串。除了您打印/格式化它们的方式之外,案例 1 中的两个双打看起来是相同的。见十进制格式 请您提供一个完整的程序示例,该程序为 Java 6 和 8 生成不同的输出。 完整代码 BigDecimal decimal = new BigDecimal(0.0050000); System.out.println(decimal.doubleValue()); //Java 6 - 0.0050 和 Java 8 - 0.005 似乎这是一个错误。 ***.com/questions/15812504/… 【参考方案1】:

System.out.println 在 java6 和 java 8 中的工作方式有所不同。 我们也谈论双打,BigDecimal 在这里不是问题。我们可以将此示例简化为:

System.out.println(Double.toString(0.0050000));

因为 println 调用 java.io.PrintStream#print(double) 然后调用 String.valueOf(d) 你可以在 JDK 中查看。

但是 java.lang.Double#toString(double) 在 JDK6 和 JDK8 中看起来不同:

return FloatingDecimal.toJavaFormatString(d);      //JDK 6
return new FloatingDecimal(d).toJavaFormatString();//JDK 8

我发现了一些已在 java 7 中修复的 JDK 问题(java 7 与 java 8 具有相同的输出)

我认为这个问题可能是一个原因:

http://bugs.java.com/view_bug.do?bug_id=6935102

http://bugs.java.com/view_bug.do?bug_id=7039369

http://bugs.java.com/view_bug.do?bug_id=7032154

【讨论】:

以上是关于Java 6 和 Java 8 之间的 Java BigDecimal.doubleValue的主要内容,如果未能解决你的问题,请参考以下文章

Java 基础知识点 笔记总结

在java中写个程序,输入10组数字,每组为0-3之间的6位数,算出相似位数最多的两组,并打印结果。

JDK 6 和 JDK8 在 Java Collection 上的区别

Scala 闭包和 Java 8 闭包之间的兼容性

java 8流和并行流之间的区别

在 Tomcat 6-Java 7/8 中运行 Tomcat 6-Java 6 WebApps