我正在读取一个带有浮点数的文本文件,所有浮点数都带有 1 或 2 个小数点。我正在使用 float()
将一行转换为浮点数,如果失败则引发 ValueError
。我将所有浮点数存储在一个列表中。打印出来时,我想将其打印为小数点后两位浮点数。
假设我有一个包含数字 -3.65, 9.17, 1
的文本文件。我阅读了每一个,一旦我将它们转换为浮动并将它们附加到列表中。现在在 Python 2 中,调用 float(-3.65)
返回 -3.65
。然而,在 Python 3 中, float(-3.65)
返回 -3.6499999999999999
失去了精度。
我想打印浮点数列表 [-3.6499999999999999, 9.1699999999999999, 1.0]
只有 2 个小数点。按照 '%.1f' % round(n, 1)
的方式做一些事情会返回一个字符串。我怎样才能返回浮点数的所有两个小数点的列表,而不是字符串?到目前为止,我使用 [round(num, 2) for num in list]
四舍五入,但需要设置小数点/精度而不是 round()
。
原文由 darksky 发布,翻译遵循 CC BY-SA 4.0 许可协议
一句话,你不能。
3.65
不能完全表示为float
。您得到的数字是最接近3.65
的数字,它具有精确的float
表示形式。(较旧的?)Python 2 和 3 之间的区别纯粹是由于默认格式。
我在 Python 2.7.3 和 3.3.0 中都看到了以下内容:
有关精确的十进制数据类型,请参阅
decimal.Decimal
。