Je veux que a soit arrondi à 13.95
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
La fonction d'arrondi ne fonctionne pas [comme je l'espère].
Je veux que a soit arrondi à 13.95
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
La fonction d'arrondi ne fonctionne pas [comme je l'espère].
Avec python < 3 (par exemple 2.6 ou 2.7), il y a deux façons de procéder.
# Option one
older_method_string = "%.9f" % numvar
# Option two
newer_method_string = "{.9f}".format(numvar)
Mais notez que pour les versions de python supérieures à 3 (par exemple 3.2 ou 3.3), l'option deux est préféré
Pour plus d'informations sur l'option deux, je vous suggère ce lien sur formatage des chaînes de caractères à partir de la documentation python .
Et pour plus d'informations sur la première option, ce lien suffira et contient des informations sur les différents drapeaux.
Le tutoriel python comporte un appendice intitulé : Arithmétique en virgule flottante : problèmes et limites . Lisez-le. Il explique ce qui se passe et pourquoi python fait de son mieux. Il contient même un exemple qui correspond au vôtre. Permettez-moi d'en citer un extrait :
>>> 0.1 0.10000000000000001
vous pouvez être tenté d'utiliser le
round()
pour le réduire à l'unique chiffre que vous attendez. Mais cela ne fait aucune différence :>>> round(0.1, 1) 0.10000000000000001
Le problème est que la valeur binaire à virgule flottante stockée pour
“0.1”
était déjà la meilleure approximation binaire possible approximation binaire de1/10
donc essayer de l'arrondir à nouveau ne peut pas le rendre meilleur : c'était déjà aussi bon que possible.Une autre conséquence est que, puisque
0.1
n'est pas exactement1/10
en additionnant dix valeurs de0.1
peut ne pas donner exactement1.0
soit :>>> sum = 0.0 >>> for i in range(10): ... sum += 0.1 ... >>> sum 0.99999999999999989
Une alternative et une solution à vos problèmes serait d'utiliser l'application decimal
module.
Il fait exactement ce que vous lui avez dit de faire, et il fonctionne correctement. Pour en savoir plus confusion en virgule flottante et peut-être essayer Décimal à la place.
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.