Python JSON parse_float = decimal.Decimal无法正常工作

时间:2009-11-26 18:21:08

标签: python json

我有一个带浮点数的字符串,但是我无法将JSON加载为小数。

x = u'{"14": [4.5899999999999999, "susan"]}'
json.loads(x, parse_float = decimal.Decimal)

返回:

{u'14': [Decimal('4.5899999999999999'), u'susan']}

知道我怎么能把它变成实际的“4.59”?

2 个答案:

答案 0 :(得分:8)

您需要定义一个执行所需舍入的函数,然后使用更改的字符串构建Decimal。你当前的解决方案确实运行得很好:它完全按照你所说的去做,即使用整个字符串,而不是你想要的(并且没有告诉代码,或者我们; - )。

E.g:

>>> def doit(s): return decimal.Decimal(str(round(float(s), 2)))
... 
>>> json.loads(x, parse_float=doit)
{u'14': [Decimal('4.59'), u'susan']}
>>> 

答案 1 :(得分:3)

你做不到。这个数字不是4.59,它是4.589999999999999999,就json解析器而言。你需要添加一些更复杂的逻辑来对这些数字进行舍入,作为decimal.Decimal的包装。