在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 楼答案
下面是一个解释,为什么你所做的不起作用
^{} 返回一个
double
。因此,您的代码使用double提供的精度计算值,然后从该double创建一个BigDecimal
。设置大小数点的精度为时已晚,因为它只有双精度作为输入所以你不能用
Math.pow()
来达到你的目的。相反,您需要找到另一个可以进行任意精度计算的库有关更多信息,请参阅此问题:Java's BigDecimal.power(BigDecimal exponent): Is there a Java library that does it?