Published on

DynamoDBにLambdaで浮動小数点を入れる。

Authors
  • avatar
    Name
    Kikusan
    Twitter

DynamoDBに浮動小数点を入れようとすると、浮動小数点の扱いの違いから以下のいずれかのエラーが出る。

(<class 'decimal.Inexact'>, Inexact([<class 'decimal.Inexact'>, <class 'decimal.Rounded'>])
Runtime.MarshalError: Unable to marshal response: Object of type type is not JSON serializable
Float types are not supported. Use Decimal types instead.

解決策は下記のような感じでDecimalに変換する。

def float_to_decimal(obj):
    if isinstance(obj, float):
        # note: str casting is important for dynamodb
        return Decimal(str(obj))
    return obj