Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python rouding float与十进制模块一起工作,但在以后使用列表中的值时不起作用_Python_Python 2.7_Floating Point_Rounding_Ironpython - Fatal编程技术网

Python rouding float与十进制模块一起工作,但在以后使用列表中的值时不起作用

Python rouding float与十进制模块一起工作,但在以后使用列表中的值时不起作用,python,python-2.7,floating-point,rounding,ironpython,Python,Python 2.7,Floating Point,Rounding,Ironpython,我知道有很多类似的问题,但我没能从中找到解决办法。 我将一个浮点数舍入为2个十进制数字,并为此使用十进制模块——到目前为止,在许多其他线程中都可以找到这一点。 这很好用 from __future__ import print_function #Working in IronPython2 from decimal import * def ToDecimal(value, digits): getcontext().prec = digits value = round(

我知道有很多类似的问题,但我没能从中找到解决办法。 我将一个浮点数舍入为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]
[截图

可能是IronPython2的问题。我在CPython 2.7和3.8上得到了期望的结果。@DarrylG确实是。我自己也可以尝试一下,但我认为我太专注于IronPython了……现在有点不幸……所以我最好的办法是将其转换为字符串,并在需要时尝试将其重新转换为浮点,对吗?但是我非常担心这会使我再次陷入浮点问题。@LoganBurleson——您运行的是什么版本的Python?正如我上面的评论所说,原始代码在CPython中工作,而CPython似乎是您正在运行的,但显然在IronPython中不起作用。也许您可以在IronPython中测试您的代码。另外,
getcontext
是的,我用的是CPython。我只是用了iron,我看到它得到的结果和他得到的一样……我不怎么用iron,所以我可以试着尽快回来。我想我忽略了#@LoganBurleson,我基本上同意,尽管我也经历过类似的情况由于浮点问题,ned使用了一个奇怪的数字。我现在无法重现这样的示例,但下次出现这种情况时,我将尝试获取一个屏幕截图。在我的情况下,我需要使用IronPython,因为我使用的是Rhinoceros3D,它正在与IronPython一起工作。@LoganBurleson,该代码刚刚返回了以下内容请告诉我:
94.05117.88[94.0499999997117.88]