From caefd01d0397b1171ebad3ecca600ab5da5ac06e Mon Sep 17 00:00:00 2001 From: Sergey B Kirpichev Date: Fri, 28 Feb 2025 05:07:49 +0300 Subject: [PATCH 1/2] gh-130662: make Fraction's formatting more compatible wrt float's --- Lib/fractions.py | 4 ++-- Lib/test/test_fractions.py | 8 ++------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/Lib/fractions.py b/Lib/fractions.py index f0cbc8c2e6c012..d25935f7602842 100644 --- a/Lib/fractions.py +++ b/Lib/fractions.py @@ -168,9 +168,9 @@ def _round_to_figures(n, d, figures): # A '0' that's *not* followed by another digit is parsed as a minimum width # rather than a zeropad flag. (?P0(?=[0-9]))? - (?P0|[1-9][0-9]*)? + (?P[0-9]+)? (?P[,_])? - (?:\.(?P0|[1-9][0-9]*))? + (?:\.(?P[0-9]+))? (?P[eEfFgG%]) """, re.DOTALL | re.VERBOSE).fullmatch diff --git a/Lib/test/test_fractions.py b/Lib/test/test_fractions.py index 98dccbec9566ac..e3a8f7c8d61aac 100644 --- a/Lib/test/test_fractions.py +++ b/Lib/test/test_fractions.py @@ -1530,6 +1530,8 @@ def test_format_f_presentation_type(self): (F(51, 1000), '.1f', '0.1'), (F(149, 1000), '.1f', '0.1'), (F(151, 1000), '.1f', '0.2'), + (F(1, 3), '.016f', '0.3333333333333333'), # issue gh-130662 + (F(1, 3), '0030.016f', '0000000000000.3333333333333333'), ] for fraction, spec, expected in testcases: with self.subTest(fraction=fraction, spec=spec): @@ -1628,12 +1630,6 @@ def test_invalid_formats(self): '=010%', '>00.2f', '>00f', - # Too many zeros - minimum width should not have leading zeros - '006f', - # Leading zeros in precision - '.010f', - '.02f', - '.000f', # Missing precision '.e', '.f', From 9425ff2e8381241b092f037349b37d630e837721 Mon Sep 17 00:00:00 2001 From: Sergey B Kirpichev Date: Sat, 1 Mar 2025 04:04:20 +0300 Subject: [PATCH 2/2] Update Lib/test/test_fractions.py --- Lib/test/test_fractions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_fractions.py b/Lib/test/test_fractions.py index e3a8f7c8d61aac..6a0ec74750ef13 100644 --- a/Lib/test/test_fractions.py +++ b/Lib/test/test_fractions.py @@ -1530,8 +1530,8 @@ def test_format_f_presentation_type(self): (F(51, 1000), '.1f', '0.1'), (F(149, 1000), '.1f', '0.1'), (F(151, 1000), '.1f', '0.2'), - (F(1, 3), '.016f', '0.3333333333333333'), # issue gh-130662 - (F(1, 3), '0030.016f', '0000000000000.3333333333333333'), + (F(22, 7), '.02f', '3.14'), # issue gh-130662 + (F(22, 7), '005.02f', '03.14'), ] for fraction, spec, expected in testcases: with self.subTest(fraction=fraction, spec=spec):