コード例 #1
0
ファイル: numbers.py プロジェクト: marcosptf/fedora
 def apply(self, value, locale, currency=None, force_frac=None):
     frac_prec = force_frac or self.frac_prec
     if not isinstance(value, Decimal):
         value = Decimal(str(value))
     value = value.scaleb(self.scale)
     is_negative = int(value.is_signed())
     if self.exp_prec:  # Scientific notation
         exp = value.adjusted()
         value = abs(value)
         # Minimum number of integer digits
         if self.int_prec[0] == self.int_prec[1]:
             exp -= self.int_prec[0] - 1
         # Exponent grouping
         elif self.int_prec[1]:
             exp = int(exp / self.int_prec[1]) * self.int_prec[1]
         if exp < 0:
             value = value * 10**(-exp)
         else:
             value = value / 10**exp
         exp_sign = ''
         if exp < 0:
             exp_sign = get_minus_sign_symbol(locale)
         elif self.exp_plus:
             exp_sign = get_plus_sign_symbol(locale)
         exp = abs(exp)
         number = u'%s%s%s%s' % \
             (self._format_significant(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))
     elif '@' in self.pattern:  # Is it a siginificant digits pattern?
         text = self._format_significant(abs(value),
                                         self.int_prec[0],
                                         self.int_prec[1])
         a, sep, b = text.partition(".")
         number = self._format_int(a, 0, 1000, locale)
         if sep:
             number += get_decimal_symbol(locale) + b
     else:  # A normal number pattern
         precision = Decimal('1.' + '1' * frac_prec[1])
         rounded = value.quantize(precision, ROUND_HALF_EVEN)
         a, sep, b = str(abs(rounded)).partition(".")
         number = (self._format_int(a, self.int_prec[0],
                                    self.int_prec[1], locale) +
                   self._format_frac(b or '0', locale, force_frac))
     retval = u'%s%s%s' % (self.prefix[is_negative], number,
                           self.suffix[is_negative])
     if u'¤' in retval:
         retval = retval.replace(u'¤¤¤',
                                 get_currency_name(currency, value, locale))
         retval = retval.replace(u'¤¤', currency.upper())
         retval = retval.replace(u'¤', get_currency_symbol(currency, locale))
     return retval
コード例 #2
0
 def apply(self, value, locale, currency=None, force_frac=None):
     frac_prec = force_frac or self.frac_prec
     if not isinstance(value, Decimal):
         value = Decimal(str(value))
     value = value.scaleb(self.scale)
     is_negative = int(value.is_signed())
     if self.exp_prec: # Scientific notation
         exp = value.adjusted()
         value = abs(value)
         # Minimum number of integer digits
         if self.int_prec[0] == self.int_prec[1]:
             exp -= self.int_prec[0] - 1
         # Exponent grouping
         elif self.int_prec[1]:
             exp = int(exp / self.int_prec[1]) * self.int_prec[1]
         if exp < 0:
             value = value * 10**(-exp)
         else:
             value = value / 10**exp
         exp_sign = ''
         if exp < 0:
             exp_sign = get_minus_sign_symbol(locale)
         elif self.exp_plus:
             exp_sign = get_plus_sign_symbol(locale)
         exp = abs(exp)
         number = u'%s%s%s%s' % \
              (self._format_significant(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))
     elif '@' in self.pattern: # Is it a siginificant digits pattern?
         text = self._format_significant(abs(value),
                                         self.int_prec[0],
                                         self.int_prec[1])
         a, sep, b = text.partition(".")
         number = self._format_int(a, 0, 1000, locale)
         if sep:
             number += get_decimal_symbol(locale) + b
     else: # A normal number pattern
         precision = Decimal('1.' + '1' * frac_prec[1])
         rounded = value.quantize(precision, ROUND_HALF_EVEN)
         a, sep, b = str(abs(rounded)).partition(".")
         number = (self._format_int(a, self.int_prec[0],
                                    self.int_prec[1], locale) +
                   self._format_frac(b or '0', locale, force_frac))
     retval = u'%s%s%s' % (self.prefix[is_negative], number,
                             self.suffix[is_negative])
     if u'¤' in retval:
         retval = retval.replace(u'¤¤¤',
             get_currency_name(currency, value, locale))
         retval = retval.replace(u'¤¤', currency.upper())
         retval = retval.replace(u'¤', get_currency_symbol(currency, locale))
     return retval