Comment raccourcir le résultat flottant que j'ai obtenu? Je n'ai besoin que de 2 chiffres après le point. Désolé, je ne sais vraiment pas comment expliquer cela mieux en anglais ...
Merci
De The Floating-Point Guide's Aide-mémoire Python :
"%.2f" % 1.2399 # returns "1.24"
"%.3f" % 1.2399 # returns "1.240"
"%.2f" % 1.2 # returns "1.20"
L'utilisation de round () n'est pas la bonne chose à faire, car les flottants sont fractions binaires qui ne peuvent pas représenter avec précision les chiffres décimaux.
Si vous devez effectuer des calculs avec des chiffres décimaux, utilisez le type Decimal
dans le module decimal
.
Si vous voulez un nombre, utilisez la fonction round()
:
>>> round(12.3456, 2)
12.35
(mais +1 pour la réponse de Michael concernant le type Decimal
.)
Si vous voulez une chaîne:
>>> print "%.2f" % 12.34567
12.35
From: Python Docs round (x [ n]) Renvoie la valeur à virgule flottante x arrondie à n chiffres après la virgule décimale. Si n est omis, il vaut zéro par défaut. Le résultat est un nombre à virgule flottante. Les valeurs sont arrondies au multiple de 10 le plus proche de la puissance moins n; si deux multiples sont également proches, l'arrondi est effectué à partir de 0 (ainsi, par exemple, arrondir (0,5) vaut 1,0 et arrondir (-0,5) vaut -1,0).
Remarque Le comportement de round () pour les flottants peut être surprenant: par exemple, round (2.675, 2) donne 2,67 au lieu de 2,68 attendu. Ce n'est pas un bug: c'est le résultat du fait que la plupart des fractions décimales ne peuvent pas être représentées exactement comme un flottant. Voir Arithmétique en virgule flottante: problèmes et limites pour plus d'informations.
On dirait que rond (293.466 .... [ 2]) le ferait,
J'espère que cela vous aidera.
def do(*args):
formattedList = [float("{:.2f}".format(num)) for num in args]
_result =(sum(formattedList))
result = round(_result,2)
return result
print(do(23.2332,45.24567,67,54.27))
Résultat:
189.75
x = round(293.4662543, 2)
>>> print "%.2f" % 293.44612345
293.45
Une manière:
>>> number = 1
>>> '{:.2f}'.format(number) #1.00
>>> '{:.3f}'.format(number) #1.000
deuxième voie:
>>> '%.3f' % number #1.000
>>> '%.3f' % number #1.000
voir "format python"
Si vous avez besoin de nombres comme 2.3k ou 12M, cette fonction fait le travail:
def get_shortened_integer(number_to_shorten):
""" Takes integer and returns a formatted string """
trailing_zeros = floor(log10(abs(number_to_shorten)))
if trailing_zeros < 3:
# Ignore everything below 1000
return trailing_zeros
Elif 3 <= trailing_zeros <= 5:
# Truncate thousands, e.g. 1.3k
return str(round(number_to_shorten/(10**3), 1)) + 'k'
Elif 6 <= trailing_zeros <= 8:
# Truncate millions like 3.2M
return str(round(number_to_shorten/(10**6), 1)) + 'M'
else:
raise ValueError('Values larger or equal to a billion not supported')
Résultats:
>>> get_shortened_integer(2300)
2.3k # <-- str
>>> get_shortened_integer(1300000)
1.3M # <-- str