标题说明了一切:如何在Java中将BigInteger
除以浮点数?我不需要除法的小数部分,可以将其舍入或截断(但我会感兴趣的是哪一个适用)。
“显而易见”甚至无法编译:
BigInteger x = BigInteger.valueOf(73).pow(42);
BigInteger y = x.divide(Math.PI); // The method divide(BigInteger) in the type BigInteger is
// not applicable for the arguments (double)
System.out.println(y);
我希望这个可以工作:
BigInteger y = new BigDecimal(x).divide(BigDecimal.valueOf(Math.PI)).toBigInteger();
不幸的是,它提供了ArithmeticException
:非终止十进制扩展;没有确切的可表示的十进制结果。π当然是......
当然,这个有用,但速度太慢了......
BigInteger y = BigInteger.valueOf(-1);
BigDecimal σ = BigDecimal.ZERO;
while(σ.compareTo(new BigDecimal(x)) < 0) {
y = y.add(BigInteger.ONE);
σ = σ.add(BigDecimal.valueOf(Math.PI));
}
什么是正确的,规范的方式?
答案 0 :(得分:3)
你必须添加RoundingMode来划分功能,否则java不知道如何围绕除法并给你ArithmeticException
BigInteger y = new BigDecimal(y).divide(BigDecimal.valueOf(Math.PI), RoundingMode.HALF_UP).toBigInteger();
上述文档链接中详细说明了所有舍入类型。