BigInteger 有问题

Something wrong with BigInteger

public static BigInteger OtherToDecimal(String value, int base) {
    BigInteger sum = new BigInteger("0");
    String kt = "0123456789ABCDEF";//
    for (int i = 0; i < value.length(); i++) {
        BigInteger k = BigDecimal.valueOf(pow(base, value.length() - 1 - i)).toBigInteger();
        sum = sum.add((BigInteger.valueOf(kt.indexOf(value.charAt(i))).multiply(k)));
    }
    return sum;
}

当我用 base16:F0F0F0F0F0F0F0 测试这个函数时,它 return 正确的结果 = 67818912035696880 但是当我用 base16 测试时:F0F0F0F0F0F0F0F0,它 return 的错误结果:17361641481138401580 正确的结果必须是 17361641481138401520 请帮助我!

Math.pow 提供了一个 double,8 个字节。因此,从一些巨大的 double 值开始,它在不太重要的数字中变得不精确。

你本可以使用

new BigInteger(value, base)

修复是:

    BigInteger k = BigDecimal.valueOf(base).pow(value.length() - 1 - i));