如何将浮点数列表中的每个项四舍五入到小数点后两位?

88 投票
9 回答
212295 浏览
提问于 2025-04-16 13:49

我有一个包含浮点数的列表,但这些数字太详细了,处理起来不太方便。我知道可以用 ("%.f" % variable) 这个方法来简化它们,比如:

result = [359.70000000000005]
result = "%.2f" % result
result = [359.70]

我想问的是,如何把一整个列表里的值都变成四舍五入后的数字,而不使用迭代器。我试过一些方法,但出现了 TypeError 错误:

list = [0.30000000000000004, 0.5, 0.20000000000000001]
list = "%.2f" % list
TypeError: not all arguments converted during string formatting

我想得到一个干净的列表,比如:

list = [0.30, 0.5, 0.20]

9 个回答

12

你可以看看Python的decimal模块,这个模块可以让你使用浮点数和进行算术运算变得更简单易懂。下面是一个简单的例子,展示了如何用它来“整理”你的列表中的数值:

>>> from decimal import *
>>> mylist = [0.30000000000000004, 0.5, 0.20000000000000001]
>>> getcontext().prec = 2
>>> ["%.2f" % e for e in mylist]
['0.30', '0.50', '0.20']
>>> [Decimal("%.2f" % e) for e in mylist]
[Decimal('0.30'), Decimal('0.50'), Decimal('0.20')]
>>> data = [float(Decimal("%.2f" % e)) for e in mylist]
>>> data
[0.3, 0.5, 0.2]
69

如果你真的想要一个不使用迭代器的解决方案,可以使用numpy库和它的数组四舍五入函数。

import numpy as np
myList = list(np.around(np.array(myList),2))
127

"%.2f" 并不会返回一个干净的浮点数。它返回的是一个字符串,这个字符串表示的是一个有两位小数的浮点数。

my_list = [0.30000000000000004, 0.5, 0.20000000000000001]
my_formatted_list = [ '%.2f' % elem for elem in my_list ]

返回结果:

['0.30', '0.50', '0.20']

另外,不要把你的变量命名为 list。这个词是保留字,用于创建列表。可以用其他名字,比如 my_list

如果你想得到 [0.30, 0.5, 0.20](或者至少尽量接近这些浮点数),你可以试试这个:

my_rounded_list = [ round(elem, 2) for elem in my_list ]

返回结果:

[0.29999999999999999, 0.5, 0.20000000000000001]

撰写回答