From b14514a153857141631d602cadf094bc932f12ee Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Wed, 18 Mar 2009 08:22:51 +0000 Subject: Fix bug in _insert_thousands_sep: too much zero padding could be added for 'n' formats with non-repeating thousands-separator. --- Lib/decimal.py | 3 +-- Lib/test/test_decimal.py | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/Lib/decimal.py b/Lib/decimal.py index 55589ad..dc38167 100644 --- a/Lib/decimal.py +++ b/Lib/decimal.py @@ -5621,8 +5621,6 @@ def _insert_thousands_sep(digits, spec, min_width=1): groups = [] for l in _group_lengths(grouping): - if groups: - min_width -= len(sep) if l <= 0: raise ValueError("group length should be positive") # max(..., 1) forces at least 1 digit to the left of a separator @@ -5632,6 +5630,7 @@ def _insert_thousands_sep(digits, spec, min_width=1): min_width -= l if not digits and min_width <= 0: break + min_width -= len(sep) else: l = max(len(digits), min_width, 1) groups.append('0'*(l - len(digits)) + digits[-l:]) diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py index 6c071f1..bb5103c 100644 --- a/Lib/test/test_decimal.py +++ b/Lib/test/test_decimal.py @@ -809,6 +809,28 @@ class DecimalFormatTest(unittest.TestCase): self.assertEqual(get_fmt(123456789, ru_RU, '.6n'), '1,23457e+8') self.assertEqual(get_fmt(123456789, crazy, '.6n'), '1&23457e+8') + # zero padding + self.assertEqual(get_fmt(1234, fr_FR, '03n'), '1234') + self.assertEqual(get_fmt(1234, fr_FR, '04n'), '1234') + self.assertEqual(get_fmt(1234, fr_FR, '05n'), '01234') + self.assertEqual(get_fmt(1234, fr_FR, '06n'), '001234') + + self.assertEqual(get_fmt(12345, en_US, '05n'), '12,345') + self.assertEqual(get_fmt(12345, en_US, '06n'), '12,345') + self.assertEqual(get_fmt(12345, en_US, '07n'), '012,345') + self.assertEqual(get_fmt(12345, en_US, '08n'), '0,012,345') + self.assertEqual(get_fmt(12345, en_US, '09n'), '0,012,345') + self.assertEqual(get_fmt(12345, en_US, '010n'), '00,012,345') + + self.assertEqual(get_fmt(123456, crazy, '06n'), '1-2345-6') + self.assertEqual(get_fmt(123456, crazy, '07n'), '1-2345-6') + self.assertEqual(get_fmt(123456, crazy, '08n'), '1-2345-6') + self.assertEqual(get_fmt(123456, crazy, '09n'), '01-2345-6') + self.assertEqual(get_fmt(123456, crazy, '010n'), '0-01-2345-6') + self.assertEqual(get_fmt(123456, crazy, '011n'), '0-01-2345-6') + self.assertEqual(get_fmt(123456, crazy, '012n'), '00-01-2345-6') + self.assertEqual(get_fmt(123456, crazy, '013n'), '000-01-2345-6') + class DecimalArithmeticOperatorsTest(unittest.TestCase): '''Unit tests for all arithmetic operators, binary and unary.''' -- cgit v0.12