本文實(shí)例講述了java簡(jiǎn)單計(jì)算圓周率。分享給大家供大家參考,具體如下:
這兩天在網(wǎng)上看到一個(gè)題,已知pi可以用函數(shù)4 * (1 – 1/3 + 1/5 – 1/7 + …) 計(jì)算,計(jì)算出小數(shù)點(diǎn)后五位(計(jì)算圓周率)。于是手動(dòng)寫(xiě)了一個(gè)小demo,歡迎大家留言,進(jìn)行交流與指教。
完整示例代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
package math; public class pitest { private static int bytelimit = 5 ; // 小數(shù)后限制位數(shù) /** * @author zhao33699 */ public static void main(string[] args) { // todo auto-generated method stub // 已知pi可以用函數(shù)4 * (1 – 1/3 + 1/5 – 1/7 + …) 計(jì)算,小數(shù)點(diǎn)后五位----計(jì)算圓周率 // 思路:按照上述公式計(jì)算出5位值,和下一次5位值比較,如果相同則為最終結(jié)果, // 如果不同,則保存新值,繼續(xù)與在下次的值比較直至相同 double pitemp = 0 ; // 根據(jù)公式所得值 double finalpi = 0 ; // 上次所得值(小數(shù)點(diǎn)后五位) double pi = 0 ; // 本次所得值(小數(shù)點(diǎn)后五位) int i = 0 ; // 計(jì)數(shù)器 double b = 0 ; // 公式的括號(hào)內(nèi)的值 int ii = 20 ; // 所得相同值次數(shù),可限制最后是有連續(xù)ii次所得相同值 int finalii = 20 ; // 與ii值相同,用于在ii值變化后 ,恢復(fù)ii值 // int iii=20;//限制相同次數(shù) while ( true ) { // 次數(shù)控制 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+"----負(fù)------***"+b); } i = i + 1 ; // system.out.println(b); pitemp = (b) * 4 ; // system.out.println(pitemp); // 小數(shù)點(diǎn)后位數(shù)大于等于5位 if (string.valueof(pitemp).length() > bytelimit) { pi = subint(pitemp); // 截取小數(shù)點(diǎn)后5位的值 system.out.println(i + "次---pi--####" + pi + "---final--####" + finalpi); // 如果上次結(jié)果與本次結(jié)果相同,限制連續(xù)次數(shù)-1; // 如果不相同,不管前面連續(xù)多少次結(jié)果相同,將限制連續(xù)次數(shù)恢復(fù)初始值,并保存本次的新值,繼續(xù)準(zhǔn)備與下次比較 if (finalpi == pi) { system.out.println( "第" + (finalii + 1 - ii) + "次-----相同----------最終結(jié)果-------------finaoanoaof" + pitemp); ii = ii - 1 ; if (ii == 0 ) { system.out.println( "$$最終所得的小數(shù)" + pitemp); system.out.println( "$$最終所得的前五位小數(shù)" + pi); break ; } } else { finalpi = pi; ii = finalii; } } } } // 格式化小數(shù) public static double subint( double i) { string s = string.valueof(i).substring( 0 , bytelimit + 2 ); // 獲取 小數(shù)點(diǎn)后5位 string ss = string.valueof(i).substring(bytelimit + 2 , bytelimit + 3 ); // 獲取小數(shù)點(diǎn)第6位 double dd = double .parsedouble(s); // 轉(zhuǎn)化為小數(shù)點(diǎn)后保留5位的小數(shù) // 如果第6位的值大于等于5,根據(jù)四舍五入,將轉(zhuǎn)化后的小數(shù)加上0.00001 if (ss.compareto( "5" ) >= 0 ) { dd = dd + 0.00001 ; } return dd; } } |
運(yùn)行結(jié)果:
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
原文鏈接:https://blog.csdn.net/java_zhao33699/article/details/19915915