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].
Vous vous heurtez au vieux problème des nombres à virgule flottante : tous les nombres ne peuvent pas être représentés. La ligne de commande ne fait que vous montrer la forme complète en virgule flottante de la mémoire. En virgule flottante, votre version arrondie est le même nombre. Les ordinateurs étant binaires, ils stockent les nombres en virgule flottante sous la forme d'un nombre entier qu'ils divisent ensuite par une puissance de deux. Ainsi, 13,95 sera représenté de la même manière que 125650429603636838/(2**53). Les nombres à double précision ont 53 bits (16 chiffres) de précision et les nombres flottants ordinaires ont 24 bits (8 chiffres) de précision. Le site la virgule flottante en python utilise la double précision pour stocker les valeurs.
par exemple
>>>125650429603636838/(2**53)
13.949999999999999
>>> 234042163/(2**24)
13.949999988079071
>>> a=13.946
>>> print(a)
13.946
>>> print("%.2f" % a)
13.95
>>> round(a,2)
13.949999999999999
>>> print("%.2f" % round(a,2))
13.95
>>> print("{0:.2f}".format(a))
13.95
>>> print("{0:.2f}".format(round(a,2)))
13.95
>>> print("{0:.15f}".format(round(a,2)))
13.949999999999999
Si vous n'avez besoin que de deux décimales, comme dans le cas des devises, vous avez deux meilleurs choix : utilisez des nombres entiers et stockez les valeurs en cents et non en dollars, puis divisez par 100 pour les convertir en dollars. Ou utilisez un nombre à virgule fixe comme décimal
Il existe de nouvelles spécifications de format, ici :
http://docs.python.org/library/string.html#format-specification-mini-language
Vous pouvez faire la même chose :
"{0:.2f}".format(13.949999999999999)
La plupart des nombres ne peuvent pas être représentés exactement en flottants. Si vous voulez arrondir le nombre parce que c'est ce que votre formule mathématique ou votre algorithme exige, alors vous devez utiliser round. Si vous souhaitez simplement limiter l'affichage à une certaine précision, n'utilisez même pas round et formatez simplement le nombre sous la forme de cette chaîne. (Si vous voulez l'afficher avec une autre méthode d'arrondi, et il y en a des tonnes, alors vous devez mélanger les deux approches).
>>> "%.2f" % 3.14159
'3.14'
>>> "%.2f" % 13.9499999
'13.95'
Et enfin, mais c'est peut-être le plus important, si vous voulez exact mathématiques, alors vous ne voulez pas de flotteurs du tout. L'exemple habituel est le traitement de l'argent et le stockage des "cents" sous forme d'un nombre entier.
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.