【问题标题】:Java Math.pow issueJava Math.pow 问题
【发布时间】:2011-12-13 15:39:01
【问题描述】:

我正在开发一个需要对数字进行立方计算的程序。长话短说,我需要将数字与字符串进行比较,所以当我转换为字符串时,我需要去掉 double 给出的小数位。为此,我使用了Math.round 并将其保存为long。这适用于相对正常的数字,但数字可以达到 999,999。

我使用了 275393(一个给定的测试编号,所以我假设它对于我正在处理的问题必须是正确的)并且计算器和计算机似乎都没有得到正确的答案。正确答案应该在结果中的某处包含 123457,但计算器有 12346(我认为它只是四舍五入,因为它在此之后停止列出数字)并且计算机有 123456(计算机在此之后停止列出数字)。四舍五入是否会给它带来问题(它不应该是因为我很确定它只会四舍五入到十分位,但谁知道)?还是别的什么?

【问题讨论】:

标签: java floating-point floating-accuracy


【解决方案1】:

Math.pow() 接受两个doubles 并返回一个double。 double 的精度不足以表示 2753933 = 20886164356123457(精确)。

解决方法是使用BigInteger.pow()。

【讨论】:

    【解决方案2】:

    double 的精度有限。相反,请使用BigInteger 或BigDecimal 进行计算。

    【讨论】:

      【解决方案3】:

      我需要将数字与字符串进行比较,所以当我转换为字符串时,我需要去掉 double 给出的小数位。

      反过来做。将String 转换为数字,然后将其与double 进行比较(有一个小的容差,以解决浮点数的不准确二进制表示)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-22
        • 1970-01-01
        • 1970-01-01
        • 2015-04-11
        • 2020-09-22
        • 1970-01-01
        相关资源
        最近更新 更多