小数转分数


        //最大公约数 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(), "系统提示"); //不能重复打开
            }
        }
    }
}

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值