D'autres réponses ont déjà souligné que la représentation des nombres flottants est un problème pour le moins épineux.
Comme vous ne donnez pas assez de contexte dans votre question, je ne peux pas savoir si le module décimal peut être utile pour vos besoins :
http://docs.python.org/library/decimal.html
Entre autres choses, vous pouvez spécifier explicitement la précision que vous souhaitez obtenir (voir la documentation) :
>>> getcontext().prec = 6
>>> Decimal('3.0')
Decimal('3.0')
>>> Decimal('3.1415926535')
Decimal('3.1415926535')
>>> Decimal('3.1415926535') + Decimal('2.7182818285')
Decimal('5.85987')
>>> getcontext().rounding = ROUND_UP
>>> Decimal('3.1415926535') + Decimal('2.7182818285')
Decimal('5.85988')
Un exemple simple à partir de mon prompt (python 2.6) :
>>> import decimal
>>> a = decimal.Decimal('10.000000001')
>>> a
Decimal('10.000000001')
>>> print a
10.000000001
>>> b = decimal.Decimal('10.00000000000000000000000000900000002')
>>> print b
10.00000000000000000000000000900000002
>>> print str(b)
10.00000000000000000000000000900000002
>>> len(str(b/decimal.Decimal('3.0')))
29
Peut-être que cela peut aider ? decimal est dans python stdlib depuis 2.4, avec des ajouts dans python 2.6.
J'espère que cela vous aidera, Francesco
2 votes
Si x est à l'origine str, pourquoi la distribution ?
1 votes
-1 : Pas d'exemples la sortie requise pour différentes valeurs de
x
. En l'absence d'exemples, nous ne pouvons que deviner le problème.0 votes
Voir aussi Les mathématiques à virgule flottante sont-elles défectueuses ?