有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在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

在字节存储方面,我有一个初学者的背景,我意识到这里的问题要么是输出格式,要么是我仍然没有得到我想要的精度,因为它没有使用我期望的内存。有什么建议吗?有可能达到这么高的精度吗?我不反对求助于Mathematica

澄清一下:我试图得到100位的完整精度(零不属于这里)


共 (1) 个答案

  1. # 1 楼答案

    下面是一个解释,为什么你所做的不起作用

    ^{}返回一个double。因此,您的代码使用double提供的精度计算值,然后从该double创建一个BigDecimal。设置大小数点的精度为时已晚,因为它只有双精度作为输入

    所以你不能用Math.pow()来达到你的目的。相反,您需要找到另一个可以进行任意精度计算的库

    有关更多信息,请参阅此问题:Java's BigDecimal.power(BigDecimal exponent): Is there a Java library that does it?