问题描述
我知道有很多类似的问题,但是我无法在其中任何一个中找到解决方案。 我将浮点数舍入为2个十进制数字,并且为此目的使用了十进制模块-到目前为止在许多其他线程中都可以找到。 这很好用。
from __future__ import print_function #Working in IronPython2
from decimal import *
def ToDecimal(value,digits):
getcontext().prec = digits
value = round(value,ndigits=digits)
return float(Decimal(str(value)))
a = 94.0478601564
b = 117.881296226
d = ToDecimal(a,2)
e = ToDecimal(b,2)
print (d)
print (e)
lst = [d,e]
print (lst)
这将导致以下输出:
94.05
117.88
[94.049999999999997,117.88]
因此,十进制模块可以很好地工作,但是当我使用这些值创建列表时,它们只会导致我试图避免的相同浮点问题。
我对如何使用十进制模块根本上是错误的理解,或者是由于再次将其转换为浮点数引起的?
预先感谢, T。
解决方法
如果实际上删除了十进制函数,则将获得所需的输出。我运行了一个示例(将getcontext()删除,因为它未在代码段中定义),并删除了十进制函数。这样,代码又回来了
def ToDecimal(value,digits):
value = round(value,ndigits=digits)
return float(str(value))
a = 94.0478601564
b = 117.881296226
d = ToDecimal(a,2)
e = ToDecimal(b,2)
print (d)
print (e)
lst = [d,e]
print (lst)
运行此命令,您将获得输出... 94.05 ... 117.88 ... [94.05,117.88] [屏幕截图1