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

vic*_*tor 0 python json

我有一个带浮点数的字符串,但是我不能让JSON把它作为小数加载.

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

返回:

{u'14': [Decimal('4.5899999999999999'), u'susan']}
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*lli 9

您需要定义一个函数来执行您想要的任何舍入,然后使用更改的字符串来构建Decimal.您当前的解决方案并很好地工作:它只是做了你确切说出它,即用整个字符串,而不是你的愿望(并没有告诉任何代码,或者我们;-).

例如:

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


ink*_*pen 5

你不能。据 json 解析器所知,这个数字不是 4.59,而是 4.589999999999999999。您需要添加一些更复杂的逻辑来对这样的数字进行舍入,作为decimal.Decimal 的包装。