Java Math.pow问题

gma*_*ter 0 java floating-point floating-accuracy

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

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

Nay*_*uki 6

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

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