小数到分数的转换

这里提供一个思路,是将小数乘以一个特别大的数 得到up作为分子,其中特别大的数我用的是down = pow(10,8) 

再用up与down除以他们的最大公约数得到各自的分子形式


def float2Fraction(f):
    down = pow(10,8)    #特别大的数,作为分母
    up = f * down            #分子
    gcd_ = gcd(up,down)  #最大公约数
    return '%d/%d'%(int(up / gcd_ ) , int(down / gcd_))


def gcd(x, y):

    """该函数返回两个数的最大公约数 

http://www.runoob.com/python3/python3-hcf.html    抄过来的

    """

    # 获取最小值
    print x ,y
    if x > y:
        smaller = y
    else:
        smaller = x
    for i in xrange(1,np.int64(smaller + 1)):    #由于数据太大,这里我将源代码改为迭代方式
        if((x % i == 0) and (y % i == 0)):
            hcf = i
    return hcf


但是这个有一个问题,就是效率太低。不知有谁能告诉我一个比较好的方法?


float2Fraction(0.3)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值