我正在用Java构建一个简单的类,用于计算Pi的值,并打印Pi的实际值。 程序的输入是一个自然数字(大于0)的字符串,用于确定计算的精度。 这是我的代码:
public class Pi {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
double myPi = 0;
for (int i=0 ; i<N ; i++) {
myPi += (Math.pow(-1,i))*(1/((i*2)+1));
}
myPi *= 4;
System.out.println(myPi + " " + Math.PI);
}
(*由于某种原因,仅在文本中缺少右括号)
问题是变量“myPi”仅在for循环的第一次迭代中发生变化。 例如,对于输入4(N = 4),结果将是4.0而不是3.1 ....
无法找到这个解决方案,谢谢!
答案 0 :(得分:4)
(1/((i*2)+1))
上述表达式在每种情况下都被评估为0
,除了i == 0
,因为它是一个整数除法,期望值是一个评估为0的分数
您需要使用浮点运算才能获得浮点值。
(1.0/((i*2)+1)) <-- Note the 1.0 here
答案 1 :(得分:2)
如果你想要一个double值作为一个操作的结果,至少有一个操作数必须是double。 试试这个
int N = Integer.parseInt(args[0]);
double myPi = 0;
for (int i=0 ; i<N ; i++) {
myPi += (Math.pow(-1,i))*(1.0/((i*2)+1));
}
myPi *= 4;
System.out.println(myPi + " " + Math.PI);