黑马程序员技术交流社区

标题: 关于精确到小数点的问题 [打印本页]

作者: 石头135    时间: 2013-5-11 23:24
标题: 关于精确到小数点的问题
本帖最后由 石头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,
再问下怎么控制输出结果的小数点位数????
以上 谢谢!!!

作者: 张迁    时间: 2013-5-11 23:39
把for循环里面的xl类型改为double型就可以了!
作者: 石贤芝    时间: 2013-5-11 23:55
本帖最后由 石贤芝 于 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循环的外面。
呵呵。。。

作者: 石头135    时间: 2013-5-12 00:01
石贤芝 发表于 2013-5-11 23:55
把“sub1+=4/(2*x+1);”  “sub2+=4/(2*x+1);”  这两行代码中的 4 变成 4.0 就可以了;
否则右边的表达式 ...

恩。是的,谢谢!
作者: 石头135    时间: 2013-5-12 00:02
石贤芝 发表于 2013-5-11 23:55
把“sub1+=4/(2*x+1);”  “sub2+=4/(2*x+1);”  这两行代码中的 4 变成 4.0 就可以了;
否则右边的表达式 ...

                    谢谢!
作者: liuelxiwd    时间: 2013-5-12 00:02
楼上正解,for (double x=0;x<=1000000000;x++ )
作者: 石头135    时间: 2013-5-12 00:02
能不能控制结果精确到小数点哪一位啊?
作者: 壹旪傾峸    时间: 2013-5-12 01:05
额 .......sub1+=4/(2*x+1);   sub2+=4/(2*x+1);  把这两行代码中的 4 变成 4.0 就可以了
作者: 曹睿翔    时间: 2013-5-12 10:09
及时更改问题状态,点编辑改为已解决
作者: 石贤芝    时间: 2013-5-13 22:28
石头135 发表于 2013-5-12 00:01
恩。是的,谢谢!

NO 谢,你姓石吗?哈哈
作者: 石头135    时间: 2013-5-13 22:35
石贤芝 发表于 2013-5-13 22:28
NO 谢,你姓石吗?哈哈

恩,姓石  名头,咱两一个姓!
作者: 石贤芝    时间: 2013-5-13 22:39
石头135 发表于 2013-5-13 22:35
恩,姓石  名头,咱两一个姓!

额,小名  。。。
作者: 石头135    时间: 2013-5-13 23:10
石贤芝 发表于 2013-5-13 22:39
额,小名  。。。

恩,小石!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2