def non_exp_repr(x): """Return a floating point representation without exponential notation. Result is a string that satisfies: float(result)==float(x) and 'e' not in result. >>> non_exp_repr(1.234e-025) '0.00000000000000000000000012339999999999999' >>> non_exp_repr(-1.234e+018) '-1234000000000000000.0' >>> for e in xrange(-50,51): ... for m in (1.234, 0.018, -0.89, -75.59, 100/7.0, -909): ... x = m * 10 ** e ... s = non_exp_repr(x) ... assert 'e' not in s ... assert float(x) == float(s) """ s = repr(float(x)) e_loc = s.lower().find('e') if e_loc == -1: return s mantissa = s[:e_loc].replace('.', '') exp = int(s[e_loc+1:]) assert s[1] == '.' or s[0] == '-' and s[2] == '.', "Unsupported format" sign = '' if mantissa[0] == '-': sign = '-' mantissa = mantissa[1:] digitsafter = len(mantissa) - 1 # num digits after the decimal point if exp >= digitsafter: return sign + mantissa + '0' * (exp - digitsafter) + '.0' elif exp <= -1: return sign + '0.' + '0' * (-exp - 1) + mantissa ip = exp + 1 # insertion point return sign + mantissa[:ip] + '.' + mantissa[ip:] if __name__ == '__main__': import doctest print 'Doctest results:', doctest.testmod()