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.5899999999999999, "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']}
>>>