diff --git a/boto3/dynamodb/types.py b/boto3/dynamodb/types.py index f358b12f55..4e6c9796bb 100644 --- a/boto3/dynamodb/types.py +++ b/boto3/dynamodb/types.py @@ -286,7 +286,7 @@ def _deserialize_bool(self, value): return value def _deserialize_n(self, value): - return DYNAMODB_CONTEXT.create_decimal(value) + return DYNAMODB_CONTEXT.create_decimal(Decimal(value).normalize()) def _deserialize_s(self, value): return value diff --git a/tests/unit/dynamodb/test_types.py b/tests/unit/dynamodb/test_types.py index 0a6c2a07f3..96d30966e0 100644 --- a/tests/unit/dynamodb/test_types.py +++ b/tests/unit/dynamodb/test_types.py @@ -167,6 +167,10 @@ def test_deserialize_integer(self): def test_deserialize_decimal(self): assert self.deserializer.deserialize({'N': '1.25'}) == Decimal('1.25') + assert self.deserializer.deserialize({'N': '1.2500'}) == Decimal('1.25') + assert self.deserializer.deserialize({'N': '1234567891234560000000000000000000000000'}) == Decimal('1.23456789123456E+39') + assert self.deserializer.deserialize({'N': '-1234567891234560000000000000000000000000'}) == Decimal('-1.23456789123456E+39') + assert self.deserializer.deserialize({'N': '1.23E+39'}) == Decimal('1.23E+39') def test_deserialize_string(self): assert self.deserializer.deserialize({'S': 'foo'}) == 'foo'