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)

結果の range_key "1347053744.819199" は "1347053744.82" として挿入されます

4

1 に答える 1

0

アップデート:

これは実際にはbotoのバグです。追跡については、 https://github.com/boto/boto/pull/890#issuecomment-8456495を参照してください。

元の回答:

なぜadd新しいアイテムを保管するために使用しているのですか?addアトミックインクリメントの関数です。put_item代わりに使用する必要があります。

フロートが丸みを帯びている理由はわかりませんが、とにかく試してはいけません。フロートをキーとして使用することは悪い習慣です。フロートは本質的に近似値であるため、フロートの等式を確実にチェックすることは不可能です。フロートの詳細については、 http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htmlを参照してください。

それでも、キーとしてfloatが本当に必要な場合は、リクエストのJSONを逆シリアル化するときにサーバー側の実装に依存しないように、その表現を完全に制御する必要があります。通常の文字列に置き換える必要があります。

于 2012-09-07T22:23:04.413 に答える