def getBaseNDigits( n, base, dropZeroes = False ): digits = convertToBaseN( n, base, outputBaseDigits=True ) result = [ ] for c in digits: if dropZeroes and c == 0: continue result.append( c ) return result
def formatNumber( number, outputRadix, leadingZero, integerGrouping ): negative = ( number < 0 ) if outputRadix == g.fibBase: strInteger = convertToFibBase( floor( number ) ) strMantissa = '' elif outputRadix == g.phiBase: strInteger, strMantissa = convertToNonintegerBase( number, phi ) elif outputRadix == g.eBase: strInteger, strMantissa = convertToNonintegerBase( number, e ) elif outputRadix == g.piBase: strInteger, strMantissa = convertToNonintegerBase( number, pi ) elif outputRadix == g.sqrt2Base: strInteger, strMantissa = convertToNonintegerBase( number, sqrt( 2 ) ) elif outputRadix < 0: # these mean special bases, not negative numbers strInteger = convertToSpecialBase( floor( number ), specialBaseFunctions[ outputRadix ] ) strMantissa = '' elif ( outputRadix != 10 ) or ( g.numerals != g.defaultNumerals ): strInteger = str( convertToBaseN( floor( number ), outputRadix, g.outputBaseDigits, g.numerals ) ) strMantissa = str( convertFractionToBaseN( frac( number ), outputRadix, int( mp.dps / math.log10( outputRadix ) ), g.outputBaseDigits ) ) else: strNumber = nstr( number, n = g.outputAccuracy, min_fixed=-inf ) if '.' in strNumber: decimal = strNumber.find( '.' ) else: decimal = len( strNumber ) strInteger = strNumber[ 1 if negative else 0 : decimal ] strMantissa = strNumber[ decimal + 1 : ] if strMantissa == '0': strMantissa = '' elif ( strMantissa != '' ) and ( g.outputAccuracy == -1 ): strMantissa = strMantissa.rstrip( '0' ) if integerGrouping > 0: firstDelimiter = len( strInteger ) % integerGrouping if leadingZero and firstDelimiter > 0: integerResult = '0' * ( integerGrouping - firstDelimiter ) else: integerResult = '' integerResult += strInteger[ : firstDelimiter ] for i in range( firstDelimiter, len( strInteger ), integerGrouping ): if integerResult != '': integerResult += g.integerDelimiter integerResult += strInteger[ i : i + integerGrouping ] else: integerResult = strInteger if g.decimalGrouping > 0: mantissaResult = '' for i in range( 0, len( strMantissa ), g.decimalGrouping ): if mantissaResult != '': mantissaResult += g.decimalDelimiter mantissaResult += strMantissa[ i : i + g.decimalGrouping ] else: mantissaResult = strMantissa result = integerResult if mantissaResult != '': result += '.' + mantissaResult return result, negative