A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 石头135 中级黑马   /  2013-5-11 23:24  /  1868 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 石头135 于 2013-5-14 12:38 编辑

/*
计算圆周率
PI=4-4/3+4/5-4/7.......
*/
class YuanZhouLv
{
public static void main(String[] args)
{
  double sub=0;
  double sub1=0;
  double sub2=0;
  for (int x=0;x<=1000000000;x++ )
  {
   if (x%2==0)
    {
    sub1+=4/(2*x+1);
    }
   if (x%2==1)
    {
    sub2+=4/(2*x+1);
    }
   sub=sub1-sub2;
  }
  System.out.println(sub);
}
}
各位大侠先帮我看看程序有没有问题,为什么我的结果一直是3.0,只精确到小数点后一位,而不是3.1415926,
再问下怎么控制输出结果的小数点位数????
以上 谢谢!!!

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 新人鼓励

查看全部评分

12 个回复

倒序浏览
把for循环里面的xl类型改为double型就可以了!
回复 使用道具 举报
本帖最后由 石贤芝 于 2013-5-11 23:56 编辑

把“sub1+=4/(2*x+1);”  “sub2+=4/(2*x+1);”  这两行代码中的 4 变成 4.0 就可以了;
否则右边的表达式就都是整型的数在运算了,当x>1时,右边的值永远是0了;
改成4.0 后,运算结果就变成了浮点型的,就不会是0了。
还有,“sub=sub1-sub2;”这行代码应该放在for循环的外面。
呵呵。。。
回复 使用道具 举报
石贤芝 发表于 2013-5-11 23:55
把“sub1+=4/(2*x+1);”  “sub2+=4/(2*x+1);”  这两行代码中的 4 变成 4.0 就可以了;
否则右边的表达式 ...

恩。是的,谢谢!
回复 使用道具 举报
石贤芝 发表于 2013-5-11 23:55
把“sub1+=4/(2*x+1);”  “sub2+=4/(2*x+1);”  这两行代码中的 4 变成 4.0 就可以了;
否则右边的表达式 ...

                    谢谢!
回复 使用道具 举报
楼上正解,for (double x=0;x<=1000000000;x++ )
回复 使用道具 举报
能不能控制结果精确到小数点哪一位啊?
回复 使用道具 举报
额 .......sub1+=4/(2*x+1);   sub2+=4/(2*x+1);  把这两行代码中的 4 变成 4.0 就可以了
回复 使用道具 举报
及时更改问题状态,点编辑改为已解决
回复 使用道具 举报
石头135 发表于 2013-5-12 00:01
恩。是的,谢谢!

NO 谢,你姓石吗?哈哈
回复 使用道具 举报
石贤芝 发表于 2013-5-13 22:28
NO 谢,你姓石吗?哈哈

恩,姓石  名头,咱两一个姓!
回复 使用道具 举报
石头135 发表于 2013-5-13 22:35
恩,姓石  名头,咱两一个姓!

额,小名  。。。
回复 使用道具 举报
石贤芝 发表于 2013-5-13 22:39
额,小名  。。。

恩,小石!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马