Saya menggunakan modul json standar di python 2.6 untuk membuat daftar pelampung. Namun, saya mendapatkan hasil seperti ini:
>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Saya ingin float diformat dengan hanya dua digit desimal. Outputnya akan terlihat seperti ini:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'
Saya telah mencoba menentukan kelas JSON Encoder saya sendiri:
class MyEncoder(json.JSONEncoder):
def encode(self, obj):
if isinstance(obj, float):
return format(obj, '.2f')
return json.JSONEncoder.encode(self, obj)
Ini berfungsi untuk satu objek float:
>>> json.dumps(23.67, cls=MyEncoder)
'23.67'
Tetapi gagal untuk objek bersarang:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Saya tidak ingin memiliki dependensi eksternal, jadi saya lebih suka menggunakan modul json standar.
Bagaimana saya bisa mencapai ini?