gpt4 book ai didi

python - 如何限制 JSONEncoder 产生的 float ?

转载 作者:太空狗 更新时间:2023-10-30 00:12:31 24 4
gpt4 key购买 nike

我正在尝试设置 python json 库,以便将具有其他字典元素的字典保存到文件中。 float 很多,我想将位数限制为例如 7

根据 SO 上的其他帖子,应使用 encoder.FLOAT_REPR。但是它不起作用。

例如下面的代码,在 Python3.7.1 中运行,打印所有数字:

import json
json.encoder.FLOAT_REPR = lambda o: format(o, '.7f' )
d = dict()
d['val'] = 5.78686876876089075543
d['name'] = 'kjbkjbkj'
f = open('test.json', 'w')
json.dump(d, f, indent=4)
f.close()

我该如何解决?

这可能无关紧要,但我使用的是 macOS。

编辑

这个问题被标记为重复。然而在the accepted answer (and until now the only one) to the original post明确指出:

Note: This solution doesn't work on python 3.6+

因此该解决方案不是正确的解决方案。此外,它使用的是 simplejson不是 json 库。

最佳答案

仍然可以在 Python 3 中对 json 进行猴子修补,但是您需要修改 float 而不是 FLOAT_REPR。确保像在 Python 2 中一样禁用 c_make_encoder

import json

class RoundingFloat(float):
__repr__ = staticmethod(lambda x: format(x, '.2f'))

json.encoder.c_make_encoder = None
if hasattr(json.encoder, 'FLOAT_REPR'):
# Python 2
json.encoder.FLOAT_REPR = RoundingFloat.__repr__
else:
# Python 3
json.encoder.float = RoundingFloat

print(json.dumps({'number': 1.0 / 81}))

优点:简单,可以进行其他格式化(例如科学记数法、去除尾随零等)。缺点:它看起来比实际上更危险。

关于python - 如何限制 JSONEncoder 产生的 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54370322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com