小数到分数的转换

这里提供一个思路,是将小数乘以一个特别大的数 得到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)

你可能感兴趣的:(基础学习)