这是对此的后续问题,我也查看了这个问题。我的 Python 脚本在每次运行期间收集数据并将数据发送到 URL。URL 应显示最多 2 位小数的数据/值。我修改了我的脚本以将值四舍五入到小数点后 2 位,如下所示。这样做之后,任何和所有打印语句都显示我的脚本四舍五入到小数点后 2 位。即使在 urlencode 之后,当我解码参数时,它也会显示 2 个小数位。但是在 URL 中,这些值显示为所有小数位 - 而不是 1.0,例如,它显示 1.000342760436734,而这些值应该显示为 1.00,而不是更多。
这是我的脚本中带有打印输出的代码:
//脚本收集的数据 - 字典列表。
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
//打印 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
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}]
//到目前为止,一切都很好。但是,在 URL 上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", etc.} 这样的值,但在 URL 上,值是 10.856473985798743。