我需要python将不正确的分数转换为混合数字,甚至将浮点数转换为混合数字。我的代码如下:
from fractions import Fraction
numerator = int(input("Enter numerator ") )
denominator = int(input("Enter denominator ") )
num = numerator / denominator
num = Fraction(num)
print(num)
如果输入为5和4,则输出为“5/4”而不是混合数字。
答案 0 :(得分:3)
您可以使用除法和模运算符来打印它:
整数部分为numerator // denominator
。
适当分数余数的分子为numerator % denominator
。
当然,分母并没有改变。
>>> num = 5
>>> den = 4
>>> print(' %d %d/%d' % (num // den, num % den, den))
1 1/4
花车有点困难,因为你必须找出分母,而且它通常不会那么准确。有两种基本方法(以及几种更高级的变体)来做到这一点。您可以循环到最大分母并选择一个给出最低错误的分母,或者您可以选择一个最大可接受的错误,然后循环直到找到一个分母,在它下面给出一个结果。后者的示例代码如下:
def approximate_frac(src, epsilon):
d = 0.0
while 1:
d += 1.0
n = int(src * d)
info = [(abs(n / d - src), n) for n in (n, n+1)]
info.sort()
err, n = info[0]
if err < epsilon:
return n, int(d)
print(approximate_frac(1.0/3.0, 0.001))
print(approximate_frac(2.0/17.0, 0.001))
这导致:
(1, 3)
(2, 17)
答案 1 :(得分:2)
from fractions import Fraction
def convert_to_mixed_numeral(num):
"""Format a number as a mixed fraction.
Examples:
convert_to_mixed_numeral('-55/10') # '-5 1/2'
convert_to_mixed_numeral(-55/10) # '-5 1/2'
convert_to_mixed_numeral(-5.5) # '-5 1/2'
Args:
num (int|float|str): The number to format. It is coerced into a string.
Returns:
str: ``num`` formatted as a mixed fraction.
"""
num = Fraction(str(num)) # use str(num) to prevent floating point inaccuracies
n, d = (num.numerator, num.denominator)
m, p = divmod(abs(n), d)
if n < 0:
m = -m
return '{} {}/{}'.format(m, p, d) if m != 0 and p > 0 \
else '{}'.format(m) if m != 0 \
else '{}/{}'.format(n, d)
该函数可以通过将分子和分母作为数字,字符串或Fraction实例传递来使用。或者可以修改它以将分子和分母作为单独的变量。
答案 2 :(得分:1)
尝试手动实施:
a = numerator // denominator
b = numerator % denominator
print '{} {}/{}'.format(a, b, denominator)
目前您只是打印'x / b',如果输入是浮点数,请先进行充分的翻译。
希望它可以提供帮助。