开发者

Python JSON parse_float=decimal.Decimal not working

I have a string with a floating point number in it, but I can't get JSON to load it as a decimal.

x = u'{"14": [4.58999开发者_如何学JAVA99999999999, "susan"]}'
json.loads(x, parse_float = decimal.Decimal)

This returns:

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

Any idea how I can make it into the actual "4.59"?


You need to define a function that performs whatever rounding you desire, then uses the altered string to build the Decimal. Your current solution does work perfectly well: it just does exactly what you tell it to, i.e., use the entire string, as opposed to what you desire (and have not told either the code, or us;-).

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']}
>>> 


You can't. That number isn't 4.59, it's 4.589999999999999999, as far as the json parser knows. You'd need to add some more complicated logic that rounds numbers like that, as a wrapper around decimal.Decimal.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜