74 votes

Comment arrondir chaque élément d'une liste de flottants à deux décimales ?

J'ai une liste qui se compose de valeurs flottantes mais elles sont trop détaillées pour que je puisse procéder. Je sais que l'on peut les raccourcir en utilisant la fonction ("%.f" % variable) opérateur, comme :

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

Ma question est la suivante : comment puis-je transformer une liste de valeurs en leurs équivalents arrondis sans utiliser un itérateur ? J'ai essayé quelque chose, mais j'ai obtenu un résultat négatif. TypeError :

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

Comment puis-je fournir une liste propre comme :

list = [0.30, 0.5, 0.20]

2 votes

Une sérieuse confusion de concepts ici. Par exemple 0.2 y 0.20000000000000001 sont des représentations de la même nombre à virgule flottante en double précision. Il suffit de lancer votre interpréteur et d'entrer 0.2 pour voir ça.

3voto

Amit Oved Points 21

Une autre option qui ne nécessite pas numpy est :

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

0voto

Le moyen le plus simple :

importez numpy comme np

np.round(liste,2)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X