code: def _get_float_remainder(fvalue, signs=9):
      
      check_positive(fvalue)
      if isinstance(fvalue, six.integer_types):
          return "0"
      if isinstance(fvalue, Decimal) and fvalue.as_tuple()[2] == 0:
          # Decimal.as_tuple() -> (sign, digit_tuple, exponent)
          # если экспонента "0" -- значит дробной части нет
          return "0"
  
      signs = min(signs, len(FRACTIONS))
  
      # нужно remainder в строке, потому что дробные X.0Y
      # будут "ломаться" до X.Y
      remainder = str(fvalue).split('.')[1]
      iremainder = int(remainder)
      orig_remainder = remainder
      factor = len(str(remainder)) - signs
  
      if factor > 0:
          # после запятой цифр больше чем signs, округляем
          iremainder = int(round(iremainder / (10.0**factor)))
      format = "%%0%dd" % min(len(remainder), signs)
  
      remainder = format % iremainder
  
      if len(remainder) > signs:
          # при округлении цифр вида 0.998 ругаться
          raise ValueError("Signs overflow: I can't round only fractional part \
                            of %s to fit %s in %d signs" % \
                           (str(fvalue), orig_remainder, signs))
  
      return remainder
docs: Get remainder of float, i.e. 2.05 -> '05'
  
      @param fvalue: input value
      @type fvalue: C{integer types}, C{float} or C{Decimal}
  
      @param signs: maximum number of signs
      @type signs: C{integer types}
  
      @return: remainder
      @rtype: C{str}
  
      @raise ValueError: fvalue is negative
      @raise ValueError: signs overflow