Python 3浮点小数点/精度

2024-05-20 08:36:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在读取一个带有浮点数的文本文件,所有的浮点数都是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()


Tags: 字符串列表精度数字floatnumreturns浮点
3条回答

注释指出目标是将打印到小数点后两位

Python 3有一个简单的答案:

>>> num=3.65
>>> "The number is {:.2f}".format(num)
'The number is 3.65'

或等同于f字符串(Python 3.6+):

>>> num = 3.65
>>> f"The number is {num:.2f}"
'The number is 3.65'

与往常一样,浮点值是一个近似值:

>>> "{}".format(num)
'3.65'
>>> "{:.10f}".format(num)
'3.6500000000'
>>> "{:.20f}".format(num)
'3.64999999999999991118'

我认为大多数用例都希望使用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中都看到了以下内容:

In [1]: 3.65
Out[1]: 3.65

In [2]: '%.20f' % 3.65
Out[2]: '3.64999999999999991118'

有关精确的十进制数据类型,请参见^{}

相关问题 更多 >