From: Isaac Jurado Date: Mon, 17 Nov 2014 17:42:33 +0000 (+0100) Subject: numbers: New parameter to override precision X-Git-Tag: dev-2a51c9b95d06~10^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f7673904a17cbbd4a661a00642602d6b5bb597a7;p=thirdparty%2Fbabel.git numbers: New parameter to override precision 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. --- diff --git a/babel/numbers.py b/babel/numbers.py index 0841d2c5..2117ce93 100644 --- a/babel/numbers.py +++ b/babel/numbers.py @@ -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):