我正在开发一个需要多维数据集的程序。长话短说,我需要将数字与字符串进行比较,所以当转换为字符串时,我需要摆脱double给出的小数位。为此,我使用Math.round
并将其另存为long
。这适用于相对正常的数字,但数字可以达到999,999。
我使用275393(给定的测试编号,所以我认为它对于我正在处理的问题必须是正确的)并且计算器和计算机似乎都没有得到正确的答案。正确答案应该在结果的某处包含123457,但计算器有12346(我认为它只是四舍五入,因为它在此之后停止列出数字)并且计算机有123456(计算机在此点之后停止列出数字)。围绕它给它提出问题(它不应该因为我很确定它只会到十分之一,但谁知道)?还是别的什么?
答案 0 :(得分:6)
Math.pow()
需要两个double
并返回double
。 double
中没有足够的精度来表示275393 3 = 20886164356123457(确切)。
解决方案是使用BigInteger.pow()
。
答案 1 :(得分:3)
double
精度有限。相反,请使用BigInteger
或BigDecimal
进行计算。
答案 2 :(得分:1)
我需要将数字与字符串进行比较,所以当转换为字符串时,我需要摆脱double给出的小数位。
反过来做。将String
转换为数字,然后将其与double
进行比较(考虑到浮点数的不准确二进制表示,可以使用较小的容差)。