【问题标题】:Java BigDecimal.doubleValue between Java 6 and Java 8Java 6 和 Java 8 之间的 Java BigDecimal.doubleValue
【发布时间】: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
  • 似乎这是一个错误。 stackoverflow.com/questions/15812504/…

标签: java


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多