Java Math.pow问题

时间:2011-12-13 15:39:02

标签: java floating-point floating-accuracy

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

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

3 个答案:

答案 0 :(得分:6)

Math.pow()需要两个double并返回doubledouble中没有足够的精度来表示275393 3 = 20886164356123457(确切)。

解决方案是使用BigInteger.pow()

答案 1 :(得分:3)

double精度有限。相反,请使用BigIntegerBigDecimal进行计算。

答案 2 :(得分:1)

  

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

反过来做。将String转换为数字,然后将其与double进行比较(考虑到浮点数的不准确二进制表示,可以使用较小的容差)。