【问题标题】:json.loads converts decimal points to 'e' in pythonjson.loads 在python中将小数点转换为'e'
【发布时间】:2018-01-15 17:34:14
【问题描述】:

这是我从服务器得到的响应

[{"type":"bid","price":0.00000026,"amount":737.15054457,"tid":200001915,"timestamp":1516036570}]

我正在尝试使用

将此字符串解析为 JSON
json_data = json.loads (req.text)

但是,当我尝试使用 json_data[0]['price'] 读取“价格”时,输出为 2.6e-07

我尝试将数据解析为json_data = json.loads (req.text, parse_float=Decimal),但仍然没有区别。

【问题讨论】:

  • 这就是python如何表示浮点值0.00000026。它与 JSON 无关。究竟是什么问题?您是否正在尝试用那个不起作用的号码做一些事情?
  • 您有正确的,您的问题仅在于打印时的表示。只需选择不同的格式进行打印,例如print(format(json_data['price'], '.8f'))
  • 顺便说一句,如果您想要完美的计算,将价格存储为浮点数可能会带来不愉快的影响。将值作为文本读取并从中构造 Python Decimal 可能是有意义的。

标签: python json python-3.x floating-point


【解决方案1】:

这就是python显示浮点数的方式

price = 0.00000026
print(price)

输出:2.6e-07 如果您想正常查看,可以这样打印:

print('{0:.8f}'.format(price))

输出:0.00000026

【讨论】:

  • 当你使用 format(object, '<format>') 时不要使用 '{.:<format>}'.format(object),这样 Python 就不必费心解析出字符串模板中的 {.:...} 部分。请参阅format() function documentation
【解决方案2】:

您的值 被解析为十进制,它只是以指数形式显示,因为它更紧凑:

import json
import decimal

>>> x = json.loads('{"a":0.00000000000000026}', parse_float=decimal.Decimal)
>>> repr(x)
"{'a': Decimal('2.6E-16')}"

您可以看到,与浮点数不同的是,精度得到了保留:

>>> x['a'] + 1
Decimal('1.00000000000000026')
>>> 1 + 2.6e-16
1.0000000000000002

所以一切都按预期进行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2016-01-12
    • 1970-01-01
    • 2011-07-16
    • 2022-09-30
    相关资源
    最近更新 更多