Java中的BigDecimal(或其他类)获得更高的精度



我想计算任意长的小数值的数字(假设我想为特定数字拿一个100个小数位数)。

//Take the square root of 2 for 100 digits in total.
public class Main {
    public static void main(String[] args) {
        BigDecimal root2 = new BigDecimal(Math.pow(2, 0.5));
        root2 = root2.setScale(99, BigDecimal.ROUND_HALF_UP);
        System.out.println(root2);
    }
}

此程序输出:

1.414213562373095145474621858738828450441360473632812500000000000000000000000000000000000000000000000

拥有字节存储的初学者背景,我意识到这里的问题要么是输出格式,要么我仍然没有得到我要寻找的精度,因为它不使用内存i'我期待它。有什么建议么?有可能获得这么高的精确度吗?我不反对求助于Mathematica。

进行澄清:我正在尝试获得100位数字的完整精度(零不属于这里)。

这是一个解释,为什么您正在做的事情不起作用。

Math.pow()返回double。因此,您的代码是使用Double提供的精度来计算值的,然后从该double创建BigDecimal。为时已晚,将精度设置为大十进制,因为它只有双重输入。

因此,您无法将Math.pow()用于目的。相反,您需要找到另一个进行任意精确计算的库。

请参阅此问题以获取更多信息:Java的BigDecimal.power(BigDecimal指数):是否有Java库?

最新更新