这是this的后续问题,我查看了this one as well。我的Python脚本在每次运行期间收集数据并将数据发送到URL。 URL应显示最多2位小数的数据/值。我修改了我的脚本,将值四舍五入到小数点后两位,如下所示。执行此操作后,任何和所有打印语句都显示我的脚本四舍五入到小数点后两位。即使在urlencode之后,当我解码params时,它显示2个小数位。但是在URL处,值显示所有小数位 - 而不是1.0,例如,它显示1.000342760436734,而值应显示为1.00而不是更多。
这是我的脚本中带有打印输出的代码:
//脚本收集的数据 - 一个dicts列表。
y = [{'a': 80.0, 'b': 0.0786235, 'c': 10.0, 'd': 10.6742903}, {'a': 80.73246, 'b': 0.0, 'c':
10.780323, 'd': 10.0}, {'a': 80.7239, 'b': 0.7823640, 'c': 10.0, 'd': 10.0}, {'a':
80.7802313217234, 'b': 0.0, 'c': 10.0, 'd': 10.9762304}]
//将小数位数舍入为2
的代码class LessPrecise(float):
def __repr__(self):
return str(self)
def roundingVals_toTwoDeci(y):
for d in y:
for k, v in d.iteritems():
v = LessPrecise(round(v, 2))
print v
d[k] = v
// Json.dumps
roundingVals_toTwoDeci(y)
j = json.dumps(y)
print j
// print j给出
[{"a": 80.0, "b": 0.0, "c": 10.0, "d": 10.0}, {"a": 100.0, "b": 0.0, "c": 0.0, "d": 0.0}, {"a":
80.0, "b": 0.0, "c": 10.0, "d": 10.0}, {"a": 90.0, "b": 0.0, "c": 0.0, "d": 10.0}]
// urlencoding it
params = urllib.urlencode({'thekey': j})
//解码参数后,我得到了
thekey=[{"a": 80.0, "b": 0.0, "c": 10.0, "d": 10.0}, {"a": 100.0, "b": 0.0, "c": 0.0, "d":
0.0}, {"a": 80.0, "b": 0.0, "c": 10.0, "d": 10.0}, {"a": 90.0, "b": 0.0, "c": 0.0, "d": 10.0}]
//到目前为止,非常好。但是,在网址上,它显示的是10.0
,而不是10.000436783313897
。我不知道发生了什么或如何解决它。
我应该提一下,即使我将值直接转换为字符串,我也会在URL中获得相同的浮点值,如下所示:
def roundingVals_toTwoDeci(y):
for d in y:
for k, v in d.iteritems():
d[k] = str(round(v, 2))
return
这样,print s = json.dumps()给出的值类似{“a”:“10.0”,“b”:“3.1”等。}但在URL处,值为10.856473985798743。