在json.dumps(),urlencode之后舍入Python中的浮点数

时间:2013-10-03 18:02:50

标签: python json floating-point urlencode rounding

这是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。

0 个答案:

没有答案