Python:强制对json中的浮点数进行精度处理?

Mar*_*son 9 python json

(更新)

这是我看到的实际问题。请注意, round() 似乎并没有做到这一点。

这是我的代码:

t0=time.time()
# stuff
t1=time.time()
perfdat={'et1' : round(t1-t0,6), 'et2': '%.6f'%(t1-t0)}
Run Code Online (Sandbox Code Playgroud)

分别是 dict 和 json 输出:

{'et2': '0.010214', 'et1': 0.010214000000000001}

{"et2":"0.010214","et1":0.010214000000000001}
Run Code Online (Sandbox Code Playgroud)

(结束更新)

我有一个浮点值,它有很多我不需要的额外精度数字。有没有办法在格式化 json 字符串时截断这些数字?

如果我将值格式化为字符串,我可以获得所需的截断,但我想将值作为(截断的)数字传输。

import json
v=2.030000002

json.dumps({'x':v})     # would like to just have 2.030
'{"x": 2.030000002}'

s= '%.3f' % (v)         # like this, but not as a string
json.dumps({'x' : s})
'{"x": "2.030"}'
Run Code Online (Sandbox Code Playgroud)

l'L*_*L'l 6

将数字包装成一个float

>>> s = float('%.3f' % (v))
>>> json.dumps({'x' : s})
{"x": 2.03}
Run Code Online (Sandbox Code Playgroud)


Ali*_*lik 2

内置函数round可以提供帮助

In [16]: v=2.030000002

In [17]: json.dumps({'x': round(v, 3)})
Out[17]: '{"x": 2.03}'
Run Code Online (Sandbox Code Playgroud)

  • 是的,但 OP 可能有不同的原因需要额外的 0。无法想象 10 万用户找不到 `round()` 函数 (3认同)
  • @TimCastelijns `2.03` 与 `2.030` 是相同的数字 (2认同)