我在使用浮点数时遇到问题。一个双。例如,Java 中的 56 实际上可能存储为 .56000...1。
我正在尝试将小数转换为分数。我尝试使用连分数来做到这一点
但是由于如何计算机存储和四舍五入的小数,我使用该方法的答案是不准确的。
我尝试了另一种方法:
public static Rational rationalize(double a){
if(a>= 1){
//throw some exception
}
String copOut = Double.toString(a);
int counter = 0;
System.out.println(a);
while(a%1 != 0 && counter < copOut.length() - 2){
a *= 10;
counter++;
}
long deno = (long)Math.pow(10,counter);//sets the denominator
Rational frac = new Rational((long)a,deno)//the unsimplified rational number
long gcd = frac.gcd();
long fnum = frac.getNumer();//gets the numerator
long fden = frac.getDenom();//gets the denominator
frac = new Rational(fnum/gcd, fden/gcd);
return frac;
}
我正在使用字符串来查找小数的长度,以确定我应该乘以 10 的次数。后来我截断了小数。这让我得到了正确的答案,但感觉不是正确的方法?有人可以建议这样做的“正确”方法吗?