如何解决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,它返回正确的结果 = 67818912035696880 但是当我用 base16 测试时:F0F0F0F0F0F0F0F0,它返回错误的结果:17361641481138401580 正确的结果必须是 17361641481138401520 请帮帮我!
解决方法
Math.pow
传递一个双精度的 8 个字节。因此,从一些巨大的 double 值中,它在较低有效数字中变得不精确。
你本来可以使用
new BigInteger(value,base)
修复是:
BigInteger k = BigDecimal.valueOf(base).pow(value.length() - 1 - i));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。