使用python将不正确的分数转换为混合数

时间:2015-08-19 01:19:29

标签: python fractions

我需要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”而不是混合数字。

3 个答案:

答案 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',如果输入是浮点数,请先进行充分的翻译。

希望它可以提供帮助。