2015-04-27 32 views
4

案例:在的Java6的BigDecimal( “0.0050000”)的doubleValue()返回0.0050,和在Java中8返回值是0.005爪哇BigDecimal.doubleValue

情况2:在的Java6 BigDecimal(“0.0250000”)。doubleValue()返回0.025,在Java 8中返回值为0.025

情况1:Java 6以额外的尾随零返回。还有如何让Java 8返回与Java相同的输出6

+1

如何打印/可视化返回的double的值? – icza

+2

doubleValue()返回一个'double',而不是一个字符串。情况1中的两个双打似乎是相同的,除了你打印/格式化它们的方式。请参阅DecimalFormat – ControlAltDel

+2

请您可以提供一个程序的完整示例,该程序会为Java 6和8生成不同的输出。 –

回答

4

System.out.println在java6和java 8中的工作方式有所不同。 另外我们讨论双打,BigDecimal在这里不是问题。因为调用的println#java.io.PrintStream中打印(双),然后调用将String.valueOf(d)您可以检查它在JDK

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

:我们可以简化这个例子。

但java.lang.Double中的#的toString(双)在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