Find common factor to convert list of floats to list of integers

前端 未结 2 1723
鱼传尺愫
鱼传尺愫 2021-01-22 21:05

I have a list of floats which comes from some other function. What I know is that in ideal world there exist a common factor which can be used to multiply each term to obtain li

2条回答
  •  北荒
    北荒 (楼主)
    2021-01-22 21:39

    Python's Fraction type can convert floating points to rationals with denominators under 1000000, and then you can find the lowest common denominator.

    >>> from fractions import Fraction
    >>> a = [2.3333333333333335, 4.666666666666667, 1.0, 1.6666666666666667]
    >>> [Fraction(x).limit_denominator() for x in a]
    [Fraction(7, 3), Fraction(14, 3), Fraction(1, 1), Fraction(5, 3)]
    

    A straightforward way to find the least common multiple using the math.gcd function:

    >>> denoms = [3,3,1,2]
    >>> functools.reduce(lambda a,b: a*b//math.gcd(a,b), denoms)
    6
    

提交回复
热议问题