gpt4 book ai didi

java - 如何在 Java 中将 BigInteger 除以 double?

转载 作者:行者123 更新时间:2023-12-01 20:17:00 24 4
gpt4 key购买 nike

标题说明了一切:我如何划分 BigInteger Java中的 float ?我不需要除法的小数部分,可以将其四舍五入或截断(但是我很感兴趣哪一个适用)。

“显而易见的”甚至无法编译:

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

正确、规范的方法是什么?

最佳答案

您必须添加 RoundingMode除法函数,否则java不知道如何舍入除法并给出ArithmeticException

BigInteger y = new BigDecimal(y).divide(BigDecimal.valueOf(Math.PI), RoundingMode.HALF_UP).toBigInteger();

上面的文档链接中详细解释了所有舍入类型。

关于java - 如何在 Java 中将 BigInteger 除以 double?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45586656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com