作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
标题说明了一切:我如何划分 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/
我是一名优秀的程序员,十分优秀!