Converting float decimal to fraction

前端 未结 6 866
粉色の甜心
粉色の甜心 2020-12-05 15:32

I am trying to convert calculations keyed in by users with decimal results into fractions. For e.g.; 66.6666666667 into 66 2/3. Any pointers? Thanx in advance

6条回答
  •  温柔的废话
    2020-12-05 16:07

    Farey fractions can be quite useful in this case.

    They can be used to convert any decimal into a fraction with the lowest possible denominator.

    Sorry - I don't have a prototype in PHP, so here's one in Python:

    def farey(v, lim):
        """No error checking on args.  lim = maximum denominator.
            Results are (numerator, denominator); (1, 0) is 'infinity'."""
        if v < 0:
            n, d = farey(-v, lim)
            return (-n, d)
        z = lim - lim   # Get a "zero of the right type" for the denominator
        lower, upper = (z, z+1), (z+1, z)
        while True:
            mediant = (lower[0] + upper[0]), (lower[1] + upper[1])
            if v * mediant[1] > mediant[0]:
                if lim < mediant[1]:
                    return upper
                lower = mediant
            elif v * mediant[1] == mediant[0]:
                if lim >= mediant[1]:
                    return mediant
                if lower[1] < upper[1]:
                    return lower
                return upper
            else:
                if lim < mediant[1]:
                    return lower
                upper = mediant
    

提交回复
热议问题