Разбор дроби в форме Джанго - PullRequest
2 голосов
/ 05 ноября 2010

Я использую Django на сервере и jQuery на интерфейсе.Я хотел бы принять как дроби, так и целые числа (например, «1/2», «1 1/4» или «2» для количества ингредиентов в рецепте). Я использую FloatField для хранения этих значений.Как лучше всего преобразовать эти дроби / целые числа в числа с плавающей точкой?

Ответы [ 2 ]

1 голос
/ 05 ноября 2010
>>> import fractions
>>> fractions.Fraction("1")
Fraction(1, 1)
>>> fractions.Fraction("1/2")
Fraction(1, 2)

К сожалению, конструктор fraction не обрабатывает смешанные дроби ("1 1/2"), поэтому вам придется написать что-то для их анализа самостоятельно. Вы можете сохранить их в базе данных либо с помощью настраиваемого поля, либо приведя их к float.

0 голосов
/ 12 июня 2013

Это работает для меня. Можно еще немного почистить.

import fractions

def parse_multi_part_fraction(f):
    if '/' not in f:
        return float(f)
    parts = f.split(' ')
    total = 0.0
    for p in parts:
        if '/' in p:
            frac = fractions.Fraction(p)
            total += frac.numerator * (1.0 / frac.denominator)
        else:
            total += float(p)
    return total
...