有没有一种方法可以禁止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
我该怎么做?
这是您所发现的:
from decimal import *
getcontext().prec = 103
def precision(context, prec=100):
return Decimal(context).quantize(Decimal('.'+'0'*(prec-1)+'1'), rounding=ROUND_DOWN)
print precision(Decimal(10).log10() / Decimal(2).log10())
输出:
3.3219280948873623478703194294893901758648313930245806120547563958159347766086252158501397433593701550
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句