58 votes

Comment imprimer float à n décimales, y compris les 0 à la fin ?

J'ai besoin d'imprimer ou de convertir un nombre flottant en une chaîne de 15 décimales même si le résultat a de nombreux 0 à la fin, par exemple :

1.6 devient 1.60000000000000000

J'ai essayé round(6.2,15) mais il renvoie 6.200000000000002 en ajoutant une erreur d'arrondi

J'ai également vu diverses personnes en ligne qui ont mis le flotteur dans une chaîne, puis ont ajouté des 0 à la fin manuellement, mais cela semble mauvais ...

Quelle est la meilleure façon de procéder?

16voto

ruohola Points 15945

Le moyen le plus propre en Python moderne >=3.6 , consiste à utiliser une chaîne f avec un formatage de chaîne :

 >>> var = 1.6
>>> f"{var:.15f}"
'1.600000000000000'

5voto

dkamins Points 10565

Les nombres à virgule flottante manquent de précision pour représenter avec précision « 1,6 » avec autant de décimales. Les erreurs d'arrondi sont réelles. Votre nombre n'est pas réellement 1.6.

Consultez : http://docs.python.org/library/decimal.html

3voto

BenH Points 1211

Je suppose qu'il s'agit essentiellement de le mettre dans une chaîne, mais cela évite l'erreur d'arrondi :

 import decimal

def display(x):
    digits = 15
    temp = str(decimal.Decimal(str(x) + '0' * digits))
    return temp[:temp.find('.') + digits + 1]

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