(更新)
这是我看到的实际问题。请注意, 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)
将数字包装成一个float:
>>> s = float('%.3f' % (v))
>>> json.dumps({'x' : s})
{"x": 2.03}
Run Code Online (Sandbox Code Playgroud)
内置函数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)