Почему «getcontext (). Prec = 2» фактически не устанавливает его так, чтобы использование Decimal () занимало два десятичных знака? - PullRequest
0 голосов
/ 10 июня 2019

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

IЯ смотрел в Интернете, но пока что не похоже, что есть какие-либо ответы на этот конкретный вопрос, на случай, если что-то происходило в остальной части программы, я запустил тестовый фрагмент кода, используя его только для простого числа итот же результат произошел, так что это не остальная часть моего кода.тест ниже.

from decimal import *
getcontext().prec = 2
test = Decimal(5.859)
print(test)

Я ожидал, что это напечатает вывод 5,86 или в худшем случае, по крайней мере, 5,85, если он не закруглен в нужном направлении.

Вместо этого он напечатал.

5.8589999999999999857891452847979962825775146484375

тот же вывод, как если бы getcontext().prec = 2 никогда не использовался

Пожалуйста, имейте в виду, что вы немного новичок в Python, поэтому не просто предполагайте, что я точно знаю, что вы имеете в виду, еслиВы бросаете случайный код в меня без объяснения причин.

1 Ответ

1 голос
/ 11 июня 2019

Согласно этой документации, точность контекста и округление вступают в действие только во время арифметических операций. Итак, чтобы достичь своей цели, вы можете сделать что-то вроде этого:

from decimal import *
getcontext().prec = 3
test = Decimal('5.859')/Decimal('1')
print(test)

выход:

Decimal('5.86')
...