real_value* translation_util::real_to_fraction(float num)
{
//分子.
long long nume = 0;
//分母.
long long denom = 1;
bool flag = false;
char ch;
string str = std::to_string(num);
//得到分子分母.
for(int i = 0; i < (int)str.length(); i++)
{
ch = str[i];
if(ch == '.')
{
flag = true;
}
else
{
nume = nume * 10 + ch - '0';
if(flag)
{
denom *= 10;
}
}
}
//化简(约分).
for(int i = 2; (long long)i < nume; i++)
{
if((nume % i == 0) && (denom % i == 0))
{
nume /= i;
denom /= i;
i = 1;
}
}
//for test
std::cout << "分子: " << nume << std::endl;
std::cout << "分母: " << denom << std::endl;
return new real_value(nume,denom);
}
说明:real_value是我写的一个包装类,其中包含的数据成员有:long long nume; long long den;
分别用来存放实数转化后的分子和分母.
translation_util为我项目中的一个工具类,里面包装了很多的静态方法,real_to_fraction()方法是其中之一。