137 votes

Tronquer des flotteurs en Python

En gros, supprimer les chiffres d'un nombre flottant pour avoir un nombre fixe de chiffres après le point, comme:

1.923328437452 -> 1.923

EDIT: Je dois sortir une chaîne sous une autre fonction, pas imprimer.

Aussi, je veux ignorer les chiffres perdus, pas les contourner.

172voto

Teifion Points 20581
 round(1.923328437452, 3)
 

Types standard Python , vous devrez faire défiler un peu pour accéder à la fonction round. Le deuxième nombre indique essentiellement le nombre de décimales à arrondir.

143voto

David Z Points 49476

Je convertirais une chaîne avec une grande précision, puis couperais tout sauf les premiers caractères.

 def trunc(f, n):
    '''Truncates/pads a float f to n decimal places without rounding'''
    slen = len('%.*f' % (n, f))
    return str(f)[:slen]
 

(édité pour corriger des bugs)

En réponse à votre commentaire: la version ci-dessus n'inclut pas les zéros, mais voici mon ancienne version:

 def trunc(f, n):
    '''Truncates/pads a float f to n decimal places without rounding'''
    return ('%.*f' % (n + 1, f))[:-1]
 

Ce dernier échoue dans certains cas, comme trunc (11.999999, 3)

34voto

Ferdinand Beyer Points 27723

Le résultat de round est un float, alors faites attention:

 >>> round(1.923328437452, 3)
1.923
>>> round(1.23456, 3)
1.2350000000000001
 

Vous serez mieux à l'aide d'une chaîne formatée:

 >>> "%.3f" % 1.923328437452
'1.923'
>>> "%.3f" % 1.23456
'1.235'
 

27voto

john_dough Points 61
n = 1.923328437452
str(n)[:4]

11voto

Matt Points 426
 def trunc(num, digits):
   sp = str(num).split('.')
   return '.'.join([sp[0], sp[:digits]])
 

Cela devrait marcher. Il devrait vous donner la troncature que vous recherchez.

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