]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
numbers: New parameter to override precision
authorIsaac Jurado <diptongo@gmail.com>
Mon, 17 Nov 2014 17:42:33 +0000 (18:42 +0100)
committerIsaac Jurado <diptongo@gmail.com>
Sun, 27 Sep 2015 09:32:32 +0000 (11:32 +0200)
The NumberFormat class uses the amount of decimal digits specified by
the given format.  We want to be able to ignore the amount of decimal
digits under some special circumstances.

Care must be taken since the NumberFormat instances seem to be cached.

babel/numbers.py

index 0841d2c56046c2e6572d2fe2343763d285446c70..2117ce93847d732002f9de632c3da66f65dcde10 100644 (file)
@@ -602,7 +602,8 @@ class NumberPattern(object):
     def __repr__(self):
         return '<%s %r>' % (type(self).__name__, self.pattern)
 
-    def apply(self, value, locale, currency=None):
+    def apply(self, value, locale, currency=None, force_frac=None):
+        frac_prec = force_frac or self.frac_prec
         if isinstance(value, float):
             value = Decimal(str(value))
         value *= self.scale
@@ -632,8 +633,7 @@ class NumberPattern(object):
                 exp_sign = get_plus_sign_symbol(locale)
             exp = abs(exp)
             number = u'%s%s%s%s' % \
-                 (self._format_sigdig(value, self.frac_prec[0],
-                                     self.frac_prec[1]),
+                 (self._format_sigdig(value, frac_prec[0], frac_prec[1]),
                   get_exponential_symbol(locale),  exp_sign,
                   self._format_int(str(exp), self.exp_prec[0],
                                    self.exp_prec[1], locale))
@@ -650,12 +650,11 @@ class NumberPattern(object):
             else:
                 number = self._format_int(text, 0, 1000, locale)
         else: # A normal number pattern
-            a, b = split_number(bankersround(abs(value),
-                                             self.frac_prec[1]))
+            a, b = split_number(bankersround(abs(value), frac_prec[1]))
             b = b or '0'
             a = self._format_int(a, self.int_prec[0],
                                  self.int_prec[1], locale)
-            b = self._format_frac(b, locale)
+            b = self._format_frac(b, locale, force_frac)
             number = a + b
         retval = u'%s%s%s' % (self.prefix[is_negative], number,
                                 self.suffix[is_negative])
@@ -705,8 +704,8 @@ class NumberPattern(object):
             gsize = self.grouping[1]
         return value + ret
 
-    def _format_frac(self, value, locale):
-        min, max = self.frac_prec
+    def _format_frac(self, value, locale, force_frac=None):
+        min, max = force_frac or self.frac_prec
         if len(value) < min:
             value += ('0' * (min - len(value)))
         if max == 0 or (min == 0 and int(value) == 0):