Python路由浮点数与十进制模块一起工作,但是在随后使用列表中的值时不起作用

问题描述

我知道有很多类似的问题,但是我无法在其中任何一个中找到解决方案。 我将浮点数舍入为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