LanQiaoTestCodes/计算PI小数点后n位.java

32 lines
1022 B
Java

package Course_Codes;
import java.math.BigDecimal;
public class 计算PI小数点后n位 {
public static void main(String[] args) {
int n=1000;
PI(n);
}
public static void PI(int n) {
BigDecimal qian=BigDecimal.ZERO;//前半部分
BigDecimal hou=BigDecimal.ZERO;//后半部分
BigDecimal ans=BigDecimal.ZERO;//最后存放pi
int jd=1000;//精确到小数点后1000位
for(int i=0;i<n;i++) {
BigDecimal de5=new BigDecimal("1").divide(new BigDecimal(2*i+1+"")
.multiply(new BigDecimal("5").pow(2*i+1)),jd,BigDecimal.ROUND_DOWN);
BigDecimal de239=new BigDecimal("1").divide(new BigDecimal(2*i+1+"")
.multiply(new BigDecimal("239").pow(2*i+1)),jd,BigDecimal.ROUND_DOWN);
BigDecimal fh=new BigDecimal((i%2==0?1:-1)+"");//判断正负号
qian=qian.add(de5.multiply(fh));
hou=hou.add(de239.multiply(fh));
}
ans=new BigDecimal("16").multiply(qian).subtract(new BigDecimal("4").multiply(hou));
System.out.println(ans.toString());
}
}