IDis31 Asked: 2020-10-30 13:10:45 +0800 CST 2020-10-30 13:10:45 +0800 CST 2020-10-30 13:10:45 +0800 CST 如何在 Python 中将带小数的数字转换为分数? 772 我想以小数形式打印带有小数的数值: 0.5 到 1/2 0.75 至 3/4 4.5 至 9/2 是否有本地库来执行转换?这个转换是如何完成的? python 3 Answers Voted Best Answer Pedro Jorge De Los Santos 2020-10-30T14:06:43+08:002020-10-30T14:06:43+08:00 您可以使用Fraction模块类fractions: >>> from fractions import Fraction >>> a = Fraction('0.5') >>> b = Fraction('0.75') >>> c = Fraction('4.5') >>> print(a) 1/2 >>> print(b) 3/4 >>> print(c) 9/2 如果您将数字保存为实数,则可以使用 进行显式转换str,然后将其传递给Fraction. Rudy Garcia 2020-10-31T04:50:47+08:002020-10-31T04:50:47+08:00 你可以做一个递归函数,返回分数的分子和分母的值,不管它是否被简化。然后使用欧几里得算法进行简化或分解。 这是算法的代码。 def mcd(a,b): assert type(a) == int and type(b) == int and a>0 and b>0 if a%b != 0: return mcd(b,a%b) else: return b 然后你做类似的事情numerador=numerador/mcd(numerador,denominador)并将denominador=denominador/mcd(numerador,denominador)其打印为字符串: print(str(numerador)+'/'+str(denominador)). Arn. Rojas 2020-11-26T09:17:21+08:002020-11-26T09:17:21+08:00 使用Fraction模块类fractions,小数有无穷小数时不返回值,因此需要.limit_denominator()在使用类后添加。 from fractions import Fraction a = 2/9 b=Fraction(str(a)) print('Valor de b: ',b) c=Fraction(str(a)).limit_denominator() print('Valor de c: ',c) 结果: Valor de b: 1111111111111111/5000000000000000 Valor de c: 2/9
您可以使用
Fraction
模块类fractions
:如果您将数字保存为实数,则可以使用 进行显式转换
str
,然后将其传递给Fraction
.你可以做一个递归函数,返回分数的分子和分母的值,不管它是否被简化。然后使用欧几里得算法进行简化或分解。
这是算法的代码。
然后你做类似的事情
numerador=numerador/mcd(numerador,denominador)
并将denominador=denominador/mcd(numerador,denominador)
其打印为字符串:使用
Fraction
模块类fractions
,小数有无穷小数时不返回值,因此需要.limit_denominator()
在使用类后添加。结果: