【问题标题】:How to compute the double values in java with proper output?如何使用正确的输出计算 java 中的双精度值?
【发布时间】:2013-12-27 07:51:48
【问题描述】:

我正在使用 Java 编写数学函数,当我尝试将我的结果与 ms office excel 公式函数进行比较时,两个缺失值的准确性使得 my comparison(==) 在双值的情况下失败。

我的结果:
2.3450414545545569404E16

MS excel 结果:
2.34504145455455694E16

我对其进行了一些研究,发现 links 很少,但它并没有解决我的问题,而且我不能使用大小数,因为它与我的最终结果不一致。

我不明白为什么我的函数会显示额外的值 (404E16) 以及如何将其格式化以产生像 (2.34504145455455694E16)

这样的输出

【问题讨论】:

    标签: java android double bigdecimal mathematical-notation


    【解决方案1】:

    在您的方法中使用strictfp。这可能会解决准确性问题。

    link 提供有关strictfp 的更多信息。

    【讨论】:

    • 是在 Excel 中吗?
    • 谢谢,那么还有 StrictMath 类。
    • 谢谢@Octopus & Jurgen。我会检查的。
    【解决方案2】:

    如果 BigDecimal 不是一个选项,这是比较双精度值的好方法:

    https://stackoverflow.com/a/8081911/3115739

    【讨论】:

    • :但是有没有办法将我的结果完全转换为ms结果?
    【解决方案3】:

    您可以在忽略最后一位的情况下进行比较:

    boolean equals = Math.abs(myResult - msExcelResult) < 1
    

    【讨论】:

    • 谢谢@Codev 我试过了,但另一个问题是我需要保持我的结果和 excel 结果之间的一致性(即两者应该完全相同)。所以有没有办法格式化我的result(2.3450414545545569404E16) 像 ms result(2.34504145455455694E16) 还是我需要遵循任何双值标准?
    【解决方案4】:

    如果问题只是格式化问题,您只需要使用适当的格式字符串来输出数字。具体使用什么取决于您输出数字的方式,但 DecimalFormat、格式字符串 (System.out.format) 等内容都会对您有所帮助。

    http://docs.oracle.com/javase/tutorial/java/data/numberformat.html

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-02
      相关资源
      最近更新 更多