0

当我尝试插入包含多于 2 位小数的 range_key 时,存储在数据库中的数字将被截断为前 2 位小数。

我该如何解决这个问题?

    max_number = 1000000.0
    random_time = random.randrange(1, max_number-1) / max_number
    range_key = int(time.time()) + random_time
    data['item_id'] = '12345'
    result = db.add(table='media', key=group_id,
                    range_key = range_key,
                    data=data)

“1347053744.819199”的结果 range_key 被插入为“1347053744.82”

4

1 回答 1

0

更新:

这实际上是boto中的一个bug,跟踪见https://github.com/boto/boto/pull/890#issuecomment-8456495

原始答案:

你为什么用它add来存储一个新项目?add是原子增量的函数。你应该put_item改用。

我不知道为什么你的浮点数是圆形的,但无论如何,你真的不应该尝试它。使用浮点数作为键是一种不好的做法。不可能可靠地检查浮点数是否相等,因为它们本质上是近似值。请参阅http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.html以深入了解浮点数。

尽管如此,如果你真的需要浮点数作为键,你需要完全控制那里的表示,以便在反序列化请求的 JSON 时不依赖于服务器端的实现。您需要用常规字符串替换它。

于 2012-09-07T22:23:04.413 回答