0
我應用以下方法將Double/Float形式轉換爲合理形式。Double/Float TO Rational(X/Y Form)
For Ex。
a=0.125
Find t=1000
Find k=GCD(t,a*t);
Print (a*t/k) "/" t/k
它給出0.125的正確o/p但不是0.12。 問題在於找到t。請幫我解決這個問題。 下面是代碼,
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int gcd(int a,int b)
{
if(b==0)
return a;
else
return gcd(b,a%b);
}
void DoubleToRational(float a)
{
int t=1;
while((float)t*a!=(int)(t*a))
{
//cout<<t*a<<" "<<(float)t*a<<" "<<(int)(t*a)<<endl; // For Checking
t=t*10;
}
int k=gcd(t*a,t);
cout<<(int)t*a/k<<"/"<<t/k;
}
int main()
{
DoubleToRational(0.125); //0.021 seconds Works Perfectly
// DoubleToRational(0.12); //Didnt Work ????
return 0;
}
此外,我不希望當精度爲大這種方法來提高工作效率。 請在這種情況下建議修改/其他方法。
我該如何在代碼中將0.12表示爲6/50 – user1413523
對於0.12而不是二進制使用十進制表示。停止使用'double'。 –
但是,假設如果輸入是雙倍 ,如0.12,2.3456,1.76899922等,那麼我應該使用什麼方法使它成爲x/y形式...... – user1413523