0

这是对此的后续问题,我也查看了这个问题。我的 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。

4

0 回答 0