//最大公约数 fraction
// int gcd2(int a, int b)
long gcd2(long a, long b)
{
long c;
c=(a>b)?b:a;
if (c <=1 ) return 1;
#if false
while (a%c!=0||b%c!=0)
{
if (c == 1) return 1;
c--;
}
return c;
#else
if (a < b)
{
a = a + b;
if(a!=b)
b = a - b;
a = a - b;
}
c = a % b;
while (a % b != 0)
{
a = b;
b = c;
c = a % b;
}
return b;
#endif
}
private void button_float2fraction_Click(object sender, EventArgs e)
{
string str= textBox_float.Text;// 0.0000000001 ~ 1E-9
int intPart = 0;
float fraction = 0;
string strFraction = "";
int temp, common_divisor=1;
long Precision = 1;// 00 ;
int sig = 1;
if (str.Contains("-"))
{
sig = -1;
str = str.Replace("-","0");
}
try
{
float fdata = Convert.ToSingle(str);
intPart = (int)fdata;
fraction = fdata - intPart;
do
{
Precision *= 10;
temp = (int)(fraction * Precision);
if(temp>100)
common_divisor =(int) gcd2(temp, Precision);
if(Precision*10<100) break;//超范围溢出
if (Precision > 0x7fffffff|| Precision<10) break;
//if (Precision>2000000000|| Precision<10) break;
}//11 13 17 19 23 31 37 41 43 47
// 2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97
//while (temp<100 || common_divisor < 11);
//while (temp < 100 || common_divisor < 17);
while (temp < 100 || common_divisor < 97) ;
if (intPart > 0) strFraction = (intPart*sig).ToString() + " ";
if(fraction>0)strFraction += (temp/ common_divisor).ToString()+ "/"+(Precision/ common_divisor).ToString();
textBox_fraction.Text = strFraction;
}
catch (Exception err)
{
MessageBox.Show(err.ToString(), "系统提示"); //不能重复打开
}
}
}
}