pythonparsing

Convert fraction to float?


Kind of like this question, but in reverse.

Given a string like 1, 1/2, or 1 2/3, what's the best way to convert it into a float? I'm thinking about using regexes on a case-by-case basis, but perhaps someone knows of a better way, or a pre-existing solution. I was hoping I could just use eval, but I think the 3rd case prevents that.


Solution

  • I tweaked James' answer a bit.

    def convert_to_float(frac_str):
        try:
            return float(frac_str)
        except ValueError:
            num, denom = frac_str.split('/')
            try:
                leading, num = num.split(' ')
                whole = float(leading)
            except ValueError:
                whole = 0
            frac = float(num) / float(denom)
            return whole - frac if whole < 0 else whole + frac
    
    
    print convert_to_float('3') # 3.0
    print convert_to_float('3/2') # 1.5
    print convert_to_float('1 1/2') # 1.5
    print convert_to_float('-1 1/2') # -1.5
    

    http://ideone.com/ItifKv