има ли начин да се попречи на закръгляването на 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.12378365509999999999999999999999999... и така нататък и тогава не можете да разчитате на това „заобиколно решение“.
И така, има ли начин да кажа на python „за това изчисление не искам да се извършва закръгляване, всъщност искам просто да ми върнете необходимия брой десетични знаци (10 в този пример) и да изхвърлите всичко друго след него"?
Разгледах тук Отрязване на плаващи елементи в Python, но основно това, от което се нуждая, не е низ от пресечен float, но друг десетичен знак, който да се използва за извършване на изчисления. Освен това функцията trunc
на приетия отговор в публикацията, която свързах, няма да работи в този случай, тъй като Decimal ще бъде закръглен точно преди да бъде предаден на аргумента '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
Как мога да постигна това?