选择您的数字是分数还是小数

时间:2018-05-20 14:38:22

标签: python python-3.x if-statement decimal fractions

我试图这样做,如果分数的分母超过2,它会打印小数。否则,它会打印分数

from fractions import Fraction
z = float(input())
frac = (Fraction(z))
s = str(z)
x = s.find("/")
x1 = x + 1
segment = z[x1:]
print(segment)

if len(segment) <= 3:
    print(frac)
else:
    print(z)

1 个答案:

答案 0 :(得分:1)

你正在变得比它需要的更难。使用Fraction实例的denominator attribute

frac = Fraction(z)
if frac.denominator > 2:
    print(z)
else:
    print(frac)

您可能希望使用Fraction.limit_denominator() method来说明浮动的不精确性:

frac = Fraction(z).limit_denominator()
if frac.denominator > 2:
    print(z)
else:
    print(frac)

Fraction.limit_denominator()找到与分母限制在100万以下的原始分数最接近的分数:

>>> from fractions import Fraction
>>> 2/3
0.6666666666666666
>>> Fraction(2/3)
Fraction(6004799503160661, 9007199254740992)
>>> Fraction(2/3).limit_denominator()
Fraction(2, 3)

另一种方法是将用户输入直接传递给Fraction();构造函数以 numerator / denominator (带可选符号)的形式接受float() 字符串的有效值。这会让您的用户输入精确的分数,例如&#39; 2/3&#39;

z = Fraction(input()).limit_denominator()
if frac.denominator > 2:
    print(float(z))
else:
    print(frac)