50

我正在阅读一个带有浮点数的文本文件,所有这些都带有 1 或 2 个小数点。我float()用来将一行转换为浮点数,ValueError如果失败则提高 a 。我将所有浮点数存储在一个列表中。打印出来时,我想将其打印为小数点后 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().

4

5 回答 5

73

注释说明目标是打印到小数点后 2 位

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'

我认为大多数用例都希望使用浮点数,然后只打印到特定的精度。

那些希望将数字本身存储为精确到 2 个十进制数字的人,我建议使用十进制类型。感兴趣的读者可以阅读更多关于浮点精度的文章。

于 2017-03-29T03:01:53.323 回答
53

执行此操作的简单方法是使用圆形内置。

round(2.6463636263,2)将显示为2.65.

于 2013-10-30T00:47:30.947 回答
27

一句话,你不能。

3.65不能完全表示为 a float。您得到的数字是最接近3.65具有精确float表示的数字。

(旧的?)Python 2 和 3 之间的区别纯粹是由于默认格式。

我在 Python 2.7.3 和 3.3.0 中都看到了以下内容:

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

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

有关精确的十进制数据类型,请参阅decimal.Decimal.

于 2013-01-26T18:34:18.777 回答
8

尝试这个:

num = input("Please input your number: ")

num = float("%0.2f" % (num))

print(num)

我相信这要简单得多。对于 1 位小数,使用%0.1f. 对于 2 位小数使用%0.2f,依此类推。

或者,如果您想将其全部减少为 2 行:

num = float("%0.2f" % (float(input("Please input your number: "))))
print(num)
于 2018-04-26T08:13:42.473 回答
4

尝试使用python3通过以下函数来理解

def floating_decimals(f_val, dec):
    prc = "{:."+str(dec)+"f}" #first cast decimal as str
    print(prc) #str format output is {:.3f}
    return prc.format(f_val)


print(floating_decimals(50.54187236456456564, 3))

输出为:50.542

希望这对你有帮助!

于 2017-10-26T01:15:37.667 回答