簡體   English   中英

如何將浮點數列表中的每個項目四舍五入到小數點后 2 位?

[英]How to round each item in a list of floats to 2 decimal places?

我有一個包含浮點值的列表,但它們太詳細而無法繼續。 我知道我們可以通過使用("%.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]

"%.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]

如果你真的想要一個無迭代器的解決方案,你可以使用 numpy 及其數組循環函數。

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

您可能想查看 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]
mylist = [0.30000000000000004, 0.5, 0.20000000000000001]
myRoundedList =  [round(x,2) for x in mylist] 
# [0.3, 0.5, 0.2]

您可以將內置maplambda表達式一起使用:

my_list = [0.2111111111, 0.5, 0.3777777777]
my_list_rounded = list(map(lambda x: round(x, ndigits=2), my_list))
my_list_rounded                                                                                                                                                                                                                 
Out[3]: [0.21, 0.5, 0.38]

或者,您也可以使用 functools 模塊中的partial來創建一個命名函數,用於四舍五入到特定數字以處理高階函數

from functools import partial

my_list = [0.2111111111, 0.5, 0.3777777777]
round_2digits = partial(round, ndigits=2)
my_list_rounded = list(map(round_2digits, my_list))
my_list_rounded                                                                                                                                                                                                                 
Out[6]: [0.21, 0.5, 0.38]

另一個不需要 numpy 的選項是:

precision = 2  
myRoundedList = [int(elem*(10**precision)+delta)/(10.0**precision) for elem in myList]

# delta=0 for floor
# delta = 0.5 for round
# delta = 1 for ceil

最簡單的方法:

將 numpy 導入為 np

np.round(列表,2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM