есть ли способ запретить округление Python, например:
>>> getcontext().prec = 11; print (Decimal(1.1237836550999999999)*10**10)
11237836551
Мне нужно показать первые 10 десятичных знаков десятичного числа, поэтому на самом деле мне нужно 11237836550
в качестве вывода, и мне не нужно это округление последней цифры (в данном случае 0 округляется до 1).
Иногда я могу просто увеличить точность (не в этом случае), а затем безопасно выполнить расчет, например:
>>> getcontext().prec = 14; print (Decimal(1.12378365509978)*10**10)
11237836550.998
Но предположим, что вы не знаете десятичную часть числа после этого '0', например это может быть 1.1237836550999999999999999999999999 ... и так далее, и тогда вы не можете полагаться на этот «обходной путь».
Итак, есть ли способ сообщить python «для этого вычисления я не хочу, чтобы выполнялось какое-либо округление, на самом деле я хочу, чтобы вы просто вернули мне необходимое количество десятичных знаков (10 в этом примере) и выбросили все еще после этого "?
Я заглянул сюда Усечение поплавков в Python, но в основном мне нужна не строка усеченное число с плавающей запятой, но другое десятичное число, используемое для выполнения вычислений. Кроме того, функция trunc
принятого ответа в сообщении, которое я связал, не будет работать в этом случае, потому что десятичное число будет округлено непосредственно перед тем, как оно будет передано в аргумент функции 'f':
>>> def trunc(f, n):
... '''Truncates/pads a float f to n decimal places without rounding'''
... return ('%.*f' % (n + 1, f))[:-1]
...
>>> trunc(Decimal(1.12378365509978), 10)
'1.1237836551' # and not 1.1237836550 as needed
Как я могу этого добиться?