D'autres réponses ont déjà souligné que la représentation des nombres flottants est une question épineuse, c'est le moins qu'on puisse dire.
Puisque 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 que vous pouvez spécifier explicitement la précision que vous souhaite obtenir (des docs):
>>> 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 simple exemple de mon invite (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? décimal est en python stdlib depuis 2.4, avec des ajouts en python 2.6.
Hope this helps, Francesco
si x est à l'origine str, pourquoi le casting? –
-1: Aucun exemple de sortie requise pour différentes valeurs de 'x'. Sans exemples, nous ne pouvons que deviner quel est le problème. –