我正在读取一个带有浮点数的文本文件,所有的浮点数都是1或2个小数点。我使用float()
将一行转换为一个浮点,如果失败,则提升一个ValueError
。我把所有的漂浮物都储存在一个列表中。打印出来的时候,我想打印成小数点后两位的浮点。
假设我有一个数字为-3,65,9,17,1的文本文件。我读了每一个,一旦我把它们转换成float并将它们附加到一个列表中。现在在Python 2中,调用float(-3.65)
返回-3.65
。然而,在Python 3中,float(-3.65) returns
-3.64999999999999999`将失去其精度。
我想打印浮动列表,[-3.6499999999999999, 9.1699999999999999, 1.0]
只有2个小数点。沿着'%.1f' % round(n, 1)
的行执行某些操作将返回一个字符串。如何返回一个包含所有两个浮点数(而不是字符串)的列表?到目前为止,我使用[round(num, 2) for num in list]
对其进行了舍入,但需要设置小数点/精度,而不是round()
。
注释指出目标是将打印到小数点后两位。
Python 3有一个简单的答案:
或等同于f字符串(Python 3.6+):
与往常一样,浮点值是一个近似值:
我认为大多数用例都希望使用float,然后只将print打印到特定的精度。
那些希望数字本身精确存储到2位小数的人,我建议使用decimal类型。More reading on floating point precision给那些感兴趣的人。
简单的方法是使用圆形内建。
round(2.6463636263,2)
将显示为2.65
。总之,你不能
3.65
不能完全表示为float
。您得到的数字是最接近具有精确表示的3.65
的数字。两者之间的区别Python 2和3纯粹是由于默认的格式。
我在Python2.7.3和3.3.0中都看到了以下内容:
有关精确的十进制数据类型,请参见^{} 。
相关问题 更多 >
编程相关推荐