物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

Python: jsonをdumpsするときの浮動小数点の桁数を制御する

dumpsで桁数を制御することはできないが、loadsで制御することが可能。速度は遅くなるが、dumps→loads→dumps にすると良い。

import json

print(json.dumps([23.67, 23.97, 23.87]))
print(json.dumps([23.67000000000002, 23.96999999999999, 23.87000000000001]))
print(json.dumps(json.loads(json.dumps([23.67000000000002, 23.96999999999999, 23.87000000000001]), parse_float=lambda x: round(float(x), 3)))) #3桁まで
print(json.dumps(json.loads(json.dumps([23.67000000000002, 23.96999999999999, 23.87000000000001]), parse_float=lambda x: round(float(x), 14)))) #14桁まで

出力

[23.67, 23.97, 23.87]
[23.67000000000002, 23.96999999999999, 23.87000000000001]
[23.67, 23.97, 23.87]
[23.67000000000002, 23.96999999999999, 23.87000000000001]

参照

stackoverflow.com