在字典中丢失浮点精度

2024-04-25 08:37:51 发布

您现在位置:Python中文网/ 问答频道 /正文

jsons = json.loads(request.data)

jsons-->

^{pr2}$

以及

json_event = jsons['json_event']

json\u事件-->

dict: {u'timestamp': 1408878136.318921}

但是当我做json_event['timestamp'] 我只得到小数点后两位的精度:

float: 1408878136.32

有没有办法保持精度?在

更新:

我不认为这是一个代表性问题。在

event, is_created = Event.create_or_update(json_event['event_id'],
                                           timestamp=json_event['timestamp'])


class Event(ndb.Model):
     ...
     timestamp = ndb.FloatProperty(required=True)

event.timestamp --> 1408878136.32


Tags: gteventjsondatarequest事件精度dict
1条回答
网友
1楼 · 发布于 2024-04-25 08:37:51

当您或任何用于打印数字的工具使用标准转换为字符串时,只会打印12个有效数字:

>>> str(1408878136.318921)
'1408878136.32'

但是当您使用repr内置函数时,会打印出足够的有效数字,以确保python解析器能够读回相同的值:

^{pr2}$

所以只要在手动调用repr()中包装您正在打印的内容。在

这只是代表性问题。显然,JSON打印机使用一些逻辑(可能是通过repr)来打印足够的数字来读回相同的值。但是你用来打印它们的工具不是。在

注意,这个逻辑相当复杂,因为二进制小数与十进制小数并不完全对应。0.3具有二进制的周期性表示,因此,如果您读取{},则实际存储的数字的值将略有不同。而最接近的十进制表示则不同。因此,逻辑必须考虑它可以应用多少舍入才能仍然读回正确的值。在

相关问题 更多 >