Search code examples
pythonjson

How do I make Json's parse_float=decimal.Decimal round the number to two decimal points?


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"?


Solution

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