【发布时间】:2015-01-23 08:22:44
【问题描述】:
有没有办法抑制 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),并且在它之后扔掉其他任何东西”?
我在这里查看了Truncating floats in Python,但基本上我需要的不是截断浮点数的字符串,而是另一个用于执行计算的小数。
此外,我链接的帖子中接受的答案的 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
我怎样才能做到这一点?
【问题讨论】: