Как установить и сохранить 2 цифры после разделителя в переменной, используя десятичные дроби? - PullRequest
1 голос
/ 24 апреля 2020

Я пытаюсь создать небольшое приложение для расчета расходов. Это уже работает с float, но я предполагаю, что использование десятичных дробей может сделать код более понятным и простым. Просто небольшой пример, чтобы показать проблему, которая у меня возникла:

    import decimal
    decimal.getcontext().prec = 2
    print ("{}".format(decimal.Decimal(1)/decimal.Decimal(3)))

вывод составляет 0,33, и мне нужны 2 цифры.

Давайте увеличим первое число с 1 до 10:

    import decimal
    decimal.getcontext().prec = 2
    print ("{}".format(decimal.Decimal(10)/decimal.Decimal(3)))

вывод равен 3.3, и это не то представление, которое мне нужно. Я все еще хотел бы иметь две цифры после разделителя: 3,33 вместо 3,3. Я пробовал разные способы, такие как использование localcontext, но не удалось:

    from decimal import Context, localcontext, Decimal
    with localcontext(Context(2)):
        print((Decimal("10") / 3))

Итак, как я могу видеть decimal.getcontext (). Pre c определяет количество цифр после разделителя, если переменная <1 или определяет общее количество цифр, если переменная> 0. Мне интересно, какое-нибудь простое решение всегда сохраняет 2 цифры после существования разделителя? Этот случай кажется довольно распространенным, и я считаю, что должно быть простое и элегантное решение, которое было найдено до меня.

Обновление: Кажется, что описание не было достаточно ясным, поэтому мое вопрос был связан с другим. Давайте попробуем уточнить :) Я ищу способ определить формат данных один раз в начале и сохранить его после, вместо того чтобы использовать quantize () каждый раз, когда я делаю операции деления или умножения. quantize () решает проблему только для одной переменной, и эта переменная не должна изменяться после этого. Например, если у меня есть 10 операций, тогда я должен использовать quantize () 10 раз, что кажется неэффективным, и в этом случае я не вижу существенных причин для изменения кода и использования десятичных знаков вместо float.

...