jsons = json.loads(request.data)
jsons - >
dict: {u'json_event': {u'timestamp': 1408878136.318921}}
和
json_event = jsons['json_event']
json_event - >
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
答案 0 :(得分:2)
当您或用于打印数字的任何工具 - 使用标准转换为字符串时,只打印12位有效数字:
>>> str(1408878136.318921)
'1408878136.32'
但是当你使用repr
内置函数时,会打印足够的有效数字以确保python解析器会读回相同的值:
>>> repr(1408878136.318921)
'1408878136.318921'
所以只需在手动repr()
电话中打印您正在打印的内容。
这只是代表性的问题。显然,JSON打印机使用一些逻辑(可能是通过repr
或可能不是)来打印足够的数字来回读相同的值。但是您用来打印它们的工具不是。
请注意,逻辑非常复杂,因为二进制小数与小数小数并不完全对应。 0.3
具有二进制的周期性表示,因此如果您阅读0.3
,则存储的实际数字将具有略微不同的值。并且最接近的十进制表示是不同的。所以逻辑必须考虑它可以应用多少舍入来仍然读回正确的值。