我目前正在使用 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());
输出:
3.1415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737
https://stackoverflow.com/questions/15164636/