您所说的是使用 Pi 作为概念而不是数字。我会做这样的事情:
class Fraction {
public int num;
public int den;
public Fraction(int n,int d) {
num=n;
den=d;
}
public Fraction() {
num=1;
den=1;
public double decValue() {
return ((double)num)/((double)den);
}
}
雅达,雅达……
public static Fraction someMethod(double decVal) {
Fraction f=new Fraction(1,1);
double howclose=0.0000001; //tiny amount of error allowed
while(abs((f.decValue()*Math.PI)-decVal)>howclose) {
if(f.decValue()*Math.PI>decVal) {
f.den++;
}
else {
f.num++;
}
}
return f;
}
基本上,努力使分数越来越接近预期的答案(decVal)。该分数将采用以下形式:
num*PI
------
den
基本上,将结果中的分数乘以 Pi,它应该非常接近 decVal。