我有一个带浮点数的字符串,但是我无法将JSON加载为小数。
x = u'{"14": [4.5899999999999999, "susan"]}'
json.loads(x, parse_float = decimal.Decimal)
返回:
{u'14': [Decimal('4.5899999999999999'), u'susan']}
知道我怎么能把它变成实际的“4.59”?
答案 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的包装。