我有一个带浮点数的字符串,但是我不能让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"?
您需要定义一个函数来执行您想要的任何舍入,然后使用更改的字符串来构建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)
你不能。据 json 解析器所知,这个数字不是 4.59,而是 4.589999999999999999。您需要添加一些更复杂的逻辑来对这样的数字进行舍入,作为decimal.Decimal 的包装。
| 归档时间: |
|
| 查看次数: |
4232 次 |
| 最近记录: |