Java求解莱布尼茨公式约值

1.问题描述

历史上有许多计算圆周率pai的公式,其中,格雷戈里和莱布尼茨发现了下面的公式:
pai = 4*(1-1/3+1/5-1/7 …)
这个公式简单而优美,但美中不足,它收敛的太慢了。
如果我们四舍五入保留它的两位小数,那么:
累积1项是:4.00
累积2项是:2.67
累积3项是:3.47
……
请你写出它累积100项是多少(四舍五入到小数后两位)。

2.解题代码

package com.kmu.stu;

import java.text.DecimalFormat;

public class Demo {
	 public static void main(String[] args) {  
	        // TODO Auto-generated method stub  
	        float a = 1;  
	        float sum = 0;  
	        for (int i = 1; i <= 100; i++) {  
	            float temp = 4/a;  
	            if (i%2!=0) {  
	                sum = sum + temp;  
	                a = a + 2;  
	            }else {  
	                sum = sum - temp;  
	                a = a + 2;  
	            }  
	        }  
	        System.out.println(formatDouble4(sum));  
	    }  

	    public static String formatDouble4(double d) {  
	        DecimalFormat df = new DecimalFormat("#.00");  
	        return df.format(d);  
	    }  
}

3.知识补充

Java中的DecimalFormat数字格式化方法:
例:
double num=578.66666,把数字保留3位小数输出。

System.out.println("格式化字符:"+new DecimalFormat("#.###").format(num));
  1. 以“0”补位时:
    如果数字少了,就会补“0”,小数和整数都会补;
    如果数字多了,就舍掉,但只舍小数的末尾,整数不能切;
    同时被舍掉的小数位会进行四舍五入处理。
  2. 以“#”补位时:
    如果数字少了,则不处理,不会补“0”,也不会补“#”;
    如果数字多了,就舍掉,但只舍去小数的末尾,整数不能舍去;
    同时被去除的小数位会进行四舍五入处理。

你可能感兴趣的:(算法题)