json.encoder.FLOAT_REPR已更改但无效

时间:2015-09-11 10:58:50

标签: python limit precision

我试图让我的JSON编码器转储浮点只有2位小数精度。所以' 2.241'成为' 2.24'

我已在this answer by Alex Martelli中读到您可以覆盖json.encoder的默认FLOAT_REPR。我尝试过以下方法:

>>> import json
>>> json.encoder.FLOAT_REPR = lambda o: format(o, '.2f')

但我没有得到相同的结果:

>>> json.dumps(2.241)
'2.241'

我甚至可以验证FLOAT_REPR已更改:

>>> print json.encoder.FLOAT_REPR
<function <lambda> at 0xb....>

按预期工作:

>>> json.encoder.FLOAT_REPR(2.241)
2.24

为什么内置的JSON模块没有使用FLOAT_REPR,当我看到它已被覆盖并且解决方案应该根据Alex Martelli工作?

我在两台不同的计算机上测试了这个,它们都在Ubuntu 14.0.4上运行Python 2.7.6。

1 个答案:

答案 0 :(得分:2)

由于c_make_encoderjson.encoder完成CPython加速,问题就出现了。

如果您将其设置为None,那么json.encoder.FLOAT_REPR技巧就可以了 正如在同一question的答案中所解释的那样:

  

猴子补丁技巧似乎不适用于原版   simplejson模块,如果安装了C加速:

我的实施可以在jsonplustypes repository

中看到

注意:此解决方案不适用于python 3.6 +