Java簡單計算圓周率完整示例
本文實例講述了Java簡單計算圓周率。分享給大家供大家參考,具體如下:
這兩天在網上看到一個題,已知Pi可以用函數4 * (1 – 1/3 + 1/5 – 1/7 + …) 計算,計算出小數點后五位(計算圓周率)。于是手動寫了一個小demo,歡迎大家留言,進行交流與指教。
完整示例代碼如下:
package math;
public class PiTest {
private static int bytelimit = 5;// 小數后限制位數
/**
* @author zhao33699
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 已知Pi可以用函數4 * (1 – 1/3 + 1/5 – 1/7 + …) 計算,小數點后五位----計算圓周率
// 思路:按照上述公式計算出5位值,和下一次5位值比較,如果相同則為最終結果,
// 如果不同,則保存新值,繼續(xù)與在下次的值比較直至相同
double pitemp = 0;// 根據公式所得值
double finalpi = 0; // 上次所得值(小數點后五位)
double pi = 0;// 本次所得值(小數點后五位)
int i = 0;// 計數器
double b = 0;// 公式的括號內的值
int ii = 20;// 所得相同值次數,可限制最后是有連續(xù)ii次所得相同值
int finalii = 20;// 與ii值相同,用于在ii值變化后 ,恢復ii值
// int iii=20;//限制相同次數
while (true) {
// 次數控制
if (i == 1000000) {
break;
}
double rs = 1 + 2 * i;
double d = 1 / rs;
if (i % 2 == 0 && i != 1) {
b = b + d;
// System.out.println("---"+i+"----正------***"+b);
} else {
b = b - d;
// System.out.println("---"+i+"----負------***"+b);
}
i = i + 1;
// System.out.println(b);
pitemp = (b) * 4;
// System.out.println(pitemp);
// 小數點后位數大于等于5位
if (String.valueOf(pitemp).length() > bytelimit) {
pi = subInt(pitemp);// 截取小數點后5位的值
System.out.println(i + "次---pi--####" + pi + "---final--####"
+ finalpi);
// 如果上次結果與本次結果相同,限制連續(xù)次數-1;
// 如果不相同,不管前面連續(xù)多少次結果相同,將限制連續(xù)次數恢復初始值,并保存本次的新值,繼續(xù)準備與下次比較
if (finalpi == pi) {
System.out.println("第" + (finalii + 1 - ii)
+ "次-----相同----------最終結果-------------finaoanoaof"
+ pitemp);
ii = ii - 1;
if (ii == 0) {
System.out.println("$$最終所得的小數" + pitemp);
System.out.println("$$最終所得的前五位小數" + pi);
break;
}
} else {
finalpi = pi;
ii = finalii;
}
}
}
}
// 格式化小數
public static double subInt(double i) {
String s = String.valueOf(i).substring(0, bytelimit + 2);// 獲取 小數點后5位
String ss = String.valueOf(i).substring(bytelimit + 2, bytelimit + 3);// 獲取小數點第6位
double dd = Double.parseDouble(s);// 轉化為小數點后保留5位的小數
// 如果第6位的值大于等于5,根據四舍五入,將轉化后的小數加上0.00001
if (ss.compareTo("5") >= 0) {
dd = dd + 0.00001;
}
return dd;
}
}
運行結果:

PS:這里再為大家推薦幾款計算工具供大家進一步參考借鑒:
在線一元函數(方程)求解計算工具:
http://tools.jb51.net/jisuanqi/equ_jisuanqi
科學計算器在線使用_高級計算器在線計算:
http://tools.jb51.net/jisuanqi/jsqkexue
在線計算器_標準計算器:
http://tools.jb51.net/jisuanqi/jsq
更多關于java算法相關內容感興趣的讀者可查看本站專題:《Java數據結構與算法教程》、《Java操作DOM節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。
相關文章
海量數據去重排序bitmap(位圖法)在java中實現(xiàn)的兩種方法
今天小編就為大家分享一篇關于海量數據去重排序bitmap(位圖法)在java中實現(xiàn)的兩種方法,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02
解決struts2 攔截器修改request的parameters參數失敗的問題
這篇文章主要介紹了解決struts2 攔截器修改request的parameters參數失敗的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
談談Java中try-catch-finally中的return語句
我們知道return語句用在某一個方法中,一是用于返回函數的執(zhí)行結果,二是用于返回值為void類型的函數中,僅僅是一個return語句(return ;),此時用于結束方法的執(zhí)行,也即此return后的語句將不會被執(zhí)行,當然,這種情況下return語句后不能再有其它的語句了2016-01-01

