Estoy usando el estándar json module en python 2.6 para serializar una lista de flotantes. Sin embargo, yo estoy consiguiendo resultados como este:Flotador de formato con módulo json estándar
>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Quiero que los flotadores a ser formateados con sólo dos dígitos decimales. La salida debe tener este aspecto:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'
He intentado definir mi propia clase JSON Encoder:
class MyEncoder(json.JSONEncoder):
def encode(self, obj):
if isinstance(obj, float):
return format(obj, '.2f')
return json.JSONEncoder.encode(self, obj)
Esto funciona para un objeto flotante única:
>>> json.dumps(23.67, cls=MyEncoder)
'23.67'
Pero falla por anidada objetos:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
No quiero tener dependencias externas, por lo que prefiero seguir con el módulo json estándar.
¿Cómo puedo lograr esto?
Esta solución no funciona en Python 2.7 utilizando la versión de Python C del codificador JSON. – Nelson
Funciona para mí en Python 2.7.3. – MiniQuark
Sin embargo, haga esto, use algo como% .15g o% .12g en vez de% .3f. –