在除法后得到一个数字中的所有小数位

我目前正在使用BigDecimal,它给了我更多的小数,但还不足以满足我的目的。 我需要能够一直到10 ^ 6数字。 这是我目前的代码

BigDecimal num = new BigDecimal(103993/33102.0); pw.println(num.toString()); 

它输出3.14159265301190249175533608649857342243194580078125

其中数字实际上有更多的小数: http ://www.wolframalpha.com/input/?i = 103993%2F33102

在评估时,您正在失去精度:

 103993/33102.0 

作为一个双重分裂。 实际上,以下内容:

 BigDecimal num = new BigDecimal(103993/33102.0); 

是等于:

 double d = 103993/33102.0; BigDecimal num = new BigDecimal(d); 

相反,使用:

 int scale = 100; BigDecimal num1 = new BigDecimal(103993); BigDecimal num2 = new BigDecimal(33102); System.out.println(num1.divide(num2, scale, RoundingMode.HALF_UP).toString()); 

OUTPUT:

 3. 

问题是你如何编号。 在BigDecimal类涉及之前, 103993/33102.0被评估为双精度浮点表达式( double )。 您应该创建单独的BigDecimal对象并使用BigDecimal.divide来获取所需的数字。

由于您需要精确的结果,我可能会在启动时将两个数字作为整数传递。

即使这样做,我怀疑你能够走出10 ^ 6数字。 您可能需要实现自己的除法算法才能达到该级别,因为任何精确数学的任何理智实现都会在该点之前很久停止(至少默认情况下)。