【发布时间】:2013-01-10 11:58:57
【问题描述】:
我正在读取一个带有浮点数的文本文件,所有这些都带有 1 或 2 个小数点。我正在使用float() 将一行转换为浮点数,如果失败则提高ValueError。我将所有浮点数存储在一个列表中。打印出来时,我想将其打印为小数点后 2 位的浮点数。
假设我有一个带有数字 -3,65, 9,17, 1 的文本文件。我阅读了每个文件,并将它们转换为浮点数并将它们附加到列表中。现在在 Python 2 中,调用 float(-3.65) 返回 -3.65。然而,在 Python 3 中,float(-3.65) returns-3.6499999999999999` 会失去其精度。
我想打印浮点数列表,[-3.6499999999999999, 9.1699999999999999, 1.0],只有 2 个小数点。按照'%.1f' % round(n, 1) 的方式做一些事情会返回一个字符串。如何返回浮点数的所有两个小数点的列表,而不是字符串?到目前为止,我使用[round(num, 2) for num in list] 对其进行了四舍五入,但需要设置小数点/精度而不是round()。
【问题讨论】:
-
在 python 2 中,
float(-3.65)也是-3.6499999999999999。这是正常。float本质上不是 100 精确。 -
不在我的:
Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34) │ [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin │ Type "help", "copyright", "credits" or "license" for more information. │ >>> float(-3.65) │ -3.65 -
另外,让我指出我知道
float并不准确,我知道这背后的原因。我正在寻找一个答案,它将显示如何在 Python 3 中以 2 个小数点打印出来。谢谢 -
基本上,由于浮点的工作方式,您无法真正做到这一点。我建议你考虑在
decimal模块中使用Decimal类。 -
这只是 Python 将其四舍五入到小数点后最多 16 位的表示。
标签: python python-3.x floating-point