- Published on
DynamoDBにLambdaで浮動小数点を入れる。
- Authors
- Name
- Kikusan
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