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