Java Math.pow问题

Java Math.pow问题,java,floating-point,floating-accuracy,Java,Floating Point,Floating Accuracy,我正在做一个程序,需要一个立方体的数字。长话短说,我需要将数字与字符串进行比较,因此我需要去掉转换为字符串时双精度小数点。为此,我使用了Math.round并将其保存为long。这适用于相对正常的数字,但数字可以高达999999 我使用了275393(一个给定的测试数字,所以我假设它对于我正在研究的问题一定是正确的),但无论是计算器还是计算机似乎都没有得到正确的答案。正确答案应该包含123457,但计算器有12346(我认为这只是四舍五入,因为它在此之后停止列出数字),计算机有123456(计算

我正在做一个程序,需要一个立方体的数字。长话短说,我需要将数字与字符串进行比较,因此我需要去掉转换为字符串时双精度小数点。为此,我使用了
Math.round
并将其保存为
long
。这适用于相对正常的数字,但数字可以高达999999

我使用了275393(一个给定的测试数字,所以我假设它对于我正在研究的问题一定是正确的),但无论是计算器还是计算机似乎都没有得到正确的答案。正确答案应该包含123457,但计算器有12346(我认为这只是四舍五入,因为它在此之后停止列出数字),计算机有123456(计算机在此之后停止列出数字)。四舍五入会带来问题吗(不应该,因为我很确定它只会四舍五入到十分之一,但谁知道呢)?还是其他原因?

Math.pow()
接受两个
double
s并返回一个
double
。双精度
中没有足够的精度来表示2753933=20886164356123457(精确)


解决方法是使用。

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

我需要将数字与字符串进行比较,所以我需要去掉转换为字符串时双精度给出的小数点

反过来做。将
字符串
转换为一个数字,然后将其与
双精度
进行比较(对于浮点数字的不准确二进制表示,有一个较小的公差)。

尝试使用双精度,而不是双精度。