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));
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));