J'utilise le module json standard en python 2.6 pour sérialiser une liste de flotteurs. Cependant, j'obtiens des résultats comme celui-ci:
>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Je veux que les flotteurs soient formatés avec seulement deux chiffres décimaux. La sortie devrait ressembler à ceci:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'
J'ai essayé de définir ma propre classe d'encodeur JSON:
class MyEncoder(json.JSONEncoder):
def encode(self, obj):
if isinstance(obj, float):
return format(obj, '.2f')
return json.JSONEncoder.encode(self, obj)
Cela fonctionne pour un seul objet flottant:
>>> json.dumps(23.67, cls=MyEncoder)
'23.67'
Mais échoue pour les objets imbriqués:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Je ne veux pas de dépendances externes, donc je préfère m'en tenir au module json standard.
Comment puis-je atteindre cet objectif?