我有这段代码:
package picalculator;
//import java.util.Scanner;
public class PiCalculator {
static int odd=1;
public static void main(String[] args) {
calculatePi();
}
public static void calculatePi() {
int counter=0;
double pi=4.0;
int num[];
num = new int[20];
num[0] = generateOdd();
num[1] = generateOdd();
num[2] = generateOdd();
num[3] = generateOdd();
num[4] = generateOdd();
num[5] = generateOdd();
num[6] = generateOdd();
num[7] = generateOdd();
num[8] = generateOdd();
num[9] = generateOdd();
num[10] = generateOdd();
num[11] = generateOdd();
num[12] = generateOdd();
num[13] = generateOdd();
num[14] = generateOdd();
num[15] = generateOdd();
num[16] = generateOdd();
num[17] = generateOdd();
num[18] = generateOdd();
num[19] = generateOdd();
for (int i=0;i<20;i++) {
if(counter == 0) {
pi -= 4/num[i];
counter++;
}else {
pi += 4/num[i];
counter--;
}
}
System.out.print(pi);
return;
}
public static int generateOdd() {
odd += 2;
return odd;
}
}
由于某种原因它会返回“3.0”,即使它应该返回更像“3.158 ......”
的东西似乎双精度值被舍入到一个整数后面带有“.0”。有没有人有关于如何解决这个问题的想法?提前谢谢!
答案 0 :(得分:8)
因为完全由整数组成的表达式4/num[i]
是使用整数数学计算的,并且始终给出整数结果。如果4
为4.0
,则表达式将使用double
进行评估,您将获得预期结果。
答案 1 :(得分:1)
您的除法是整数除法,因此只有整数被减去或加到pi。解决这个问题......
for (int i = 0; i < 20; i++) {
if (counter == 0) {
pi -= 4.0 / num[i];
counter++;
} else {
pi += 4.0 / num[i];
counter--;
}
}
答案 2 :(得分:0)
您错过了将结果转换为加倍。
for (int i=0;i<20;i++) {
if(counter == 0) {
pi -= (double) 4/num[i];
counter++;
}else {
pi += (double) 4/num[i];
counter--;
}
}
答案 3 :(得分:0)
使用D或d作为前缀告诉jvm它是double而不是整数。 像这个4D或4d。 完整的例子是 -
double result=4d/3d;