使用Java如何计算圆周率?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
代码如下:
packagemath; publicclassPiTest{ privatestaticintbytelimit=5;//小数后限制位数 /** *@authorzhao33699 */ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub //已知Pi可以用函数4*(1–1/3+1/5–1/7+…)计算,小数点后五位----计算圆周率 //思路:按照上述公式计算出5位值,和下一次5位值比较,如果相同则为最终结果, //如果不同,则保存新值,继续与在下次的值比较直至相同 doublepitemp=0;//根据公式所得值 doublefinalpi=0;//上次所得值(小数点后五位) doublepi=0;//本次所得值(小数点后五位) inti=0;//计数器 doubleb=0;//公式的括号内的值 intii=20;//所得相同值次数,可限制最后是有连续ii次所得相同值 intfinalii=20;//与ii值相同,用于在ii值变化后,恢复ii值 //intiii=20;//限制相同次数 while(true){ //次数控制 if(i==1000000){ break; } doublers=1+2*i; doubled=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); //如果上次结果与本次结果相同,限制连续次数-1; //如果不相同,不管前面连续多少次结果相同,将限制连续次数恢复初始值,并保存本次的新值,继续准备与下次比较 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; } } } } //格式化小数 publicstaticdoublesubInt(doublei){ Strings=String.valueOf(i).substring(0,bytelimit+2);//获取小数点后5位 Stringss=String.valueOf(i).substring(bytelimit+2,bytelimit+3);//获取小数点第6位 doubledd=Double.parseDouble(s);//转化为小数点后保留5位的小数 //如果第6位的值大于等于5,根据四舍五入,将转化后的小数加上0.00001 if(ss.compareTo("5")>=0){ dd=dd+0.00001; } returndd; } }
运行结果:
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注恰卡编程网行业资讯频道,感谢您对恰卡编程网的支持。
java fileinputstream中文乱码如何解决
javafileinputstream中文乱码如何解决今天小编给...
java实现点赞功能
java实现简单点赞功能
java实现收藏功能
java输入空行结束问题怎么解决
Java线程中常用的操作有哪些
java输入时怎么通过回车来结束输入
Java数据结构之线索化二叉树怎么实现
Java中的泛型怎么理解
Java字符串编码解码性能怎么提升
用户名
密码
记住登录状态 忘记密码?
邮箱
确认密码
我已阅读并同意 用户协议