impression de flotter à n décimales, y compris de fuite 0
J'ai besoin d'imprimer ou de convertir un nombre à virgule à 15 décimale de la chaîne, même si le résultat a beaucoup de fuite 0 eg:
1.6 devient 1.6000000000000000
J'ai essayé ronde(6.2,15), mais elle renvoie 6.2000000000000002 l'ajout d'une erreur d'arrondi
J'ai aussi vu plusieurs personnes en ligne qui a mis le flotteur dans une chaîne, puis ajouté de fuite 0 manuellement mais cela semble mal...
Quelle est la meilleure façon de le faire?
- Note de côté, mais que les 2 derniers n'est pas une erreur d'arrondi exactement. Le nombre 6.2, comme beaucoup d'autres nombres réels, n'est pas exactement représentable avec une virgule flottante variable dans un ordinateur. Voir docs.python.org/tutorial/floatingpoint.html et stackoverflow.com/questions/1089018/... pour plus d'informations.
- Je pense que vous pourriez sortir avec l'appelant une erreur d'arrondi - l'entrée est arrondie au plus proche nombre binaire.
Vous devez vous connecter pour publier un commentaire.
Pour les versions de Python 2.6+ et 3.x
Vous pouvez utiliser le
str.format
méthode. Exemples:Note le
1
à la fin du premier exemple est l'erreur d'arrondi; cela se produit parce que la représentation exacte du nombre décimal 1.6 nécessite un nombre infini de chiffres binaires. Puisque les nombres à virgule flottante ont un nombre fini de bits, le nombre est arrondi à proximité, mais pas de l'égalité, de la valeur.Pour les versions de Python antérieures à 2,6 (au moins jusqu'à 2.0)
Vous pouvez utiliser le "modulo-mise en forme de syntaxe" (cela fonctionne pour Python 2.6 et 2.7 trop):
'{0:.16f}'.format(x)
, pas sûr que les vieux Python.'%.16f' % 1.6
) fonctionne au moins en arrière de Python 2.0 (Python 2.0 Chaîne Opérations de mise en forme).# Error: ValueError: zero length field name in format #
0
dans le code de ce commentaire). Cela est également vrai si vous avez Python 3.0.print '{0:.15f}'.format(600.2)
vous remarquerez déjà non nulle numéros rampante à partir de la droite, et la plus grande, le nombre, le plus de "bruit" que vous verrez dans les décimales. Voir ma réponse sur l'utilisation de l'decimal
module, si vous soucient vraiment le maintien de 15 chiffres significatifs.Des nombres à virgule flottante manque de précision pour représenter avec précision "1.6" pour qui nombre de décimales. Les erreurs d'arrondi sont réels. Votre numéro n'est pas réellement 1.6.
Découvrez: http://docs.python.org/library/decimal.html
Je suppose que c'est essentiellement le mettre dans une chaîne de caractères, mais cela évite de l'erreur d'arrondi: