[Python-checkins] r70445 - in python/branches/py3k: Lib/decimal.py Lib/test/test_decimal.py

mark.dickinson python-checkins at python.org
Wed Mar 18 09:25:36 CET 2009


Author: mark.dickinson
Date: Wed Mar 18 09:25:36 2009
New Revision: 70445

Log:
Merged revisions 70444 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r70444 | mark.dickinson | 2009-03-18 08:22:51 +0000 (Wed, 18 Mar 2009) | 3 lines
  
  Fix bug in _insert_thousands_sep: too much zero padding could be
  added for 'n' formats with non-repeating thousands-separator.
........


Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Lib/decimal.py
   python/branches/py3k/Lib/test/test_decimal.py

Modified: python/branches/py3k/Lib/decimal.py
==============================================================================
--- python/branches/py3k/Lib/decimal.py	(original)
+++ python/branches/py3k/Lib/decimal.py	Wed Mar 18 09:25:36 2009
@@ -5690,8 +5690,6 @@
 
     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
@@ -5701,6 +5699,7 @@
         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:])

Modified: python/branches/py3k/Lib/test/test_decimal.py
==============================================================================
--- python/branches/py3k/Lib/test/test_decimal.py	(original)
+++ python/branches/py3k/Lib/test/test_decimal.py	Wed Mar 18 09:25:36 2009
@@ -798,6 +798,28 @@
         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.'''


More information about the Python-checkins mailing list