From 9c77cbb7322fd765cbc2bcb3ec2478debc84cbb9 Mon Sep 17 00:00:00 2001 From: Taneli Hukkinen <3275109+hukkin@users.noreply.github.com> Date: Sun, 29 Dec 2024 18:52:42 +0200 Subject: [PATCH] improve: preserve Decimal type when round-tripping --- src/tomli_w/_writer.py | 3 ++- tests/test_types.py | 10 ++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/tomli_w/_writer.py b/src/tomli_w/_writer.py index 600a707..c611ede 100644 --- a/src/tomli_w/_writer.py +++ b/src/tomli_w/_writer.py @@ -125,7 +125,8 @@ def format_decimal(obj: Decimal) -> str: return "inf" if obj == Decimal("-inf"): return "-inf" - return str(obj) + dec_str = str(obj) + return dec_str if "." in dec_str or "E" in dec_str else dec_str + ".0" def format_inline_table(obj: Mapping, ctx: Context) -> str: diff --git a/tests/test_types.py b/tests/test_types.py index 0444cd9..b06d490 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -5,20 +5,26 @@ def test_decimal(): obj = { - "decimal-0": Decimal(0), + "decimal-0": Decimal("0"), + "decimal-4": Decimal("4"), "decimal-pi": Decimal("3.14159"), "decimal-inf": Decimal("inf"), "decimal-minus-inf": Decimal("-inf"), "decimal-nan": Decimal("nan"), + "decimal-2e3": Decimal("2e3"), + "decimal-2E3": Decimal("2E3"), } assert ( tomli_w.dumps(obj) == """\ -decimal-0 = 0 +decimal-0 = 0.0 +decimal-4 = 4.0 decimal-pi = 3.14159 decimal-inf = inf decimal-minus-inf = -inf decimal-nan = nan +decimal-2e3 = 2E+3 +decimal-2E3 = 2E+3 """ )