Neal Becker wrote: > Like a puzzle? I need to interface python output to some strange old > program. It wants to see numbers formatted as: > > e.g.: 0.23456789E01 > > That is, the leading digit is always 0, instead of the first significant > digit. It is fixed width. I can almost get it with '% 16.9E', but not > quite. > > My solution is to print to a string with the '% 16.9E' format, then parse it > with re to pick off the pieces and fix it up. Pretty ugly. Any better > ideas? > > Does this do what you want?
>>> from math import log10, modf, fabs >>> def format(n, mantplaces = 9, expplaces = 2): ... sign, n = n/fabs(n), fabs(n) # preserve the sign ... c, m = modf(log10(n)) ... c, m = c - (c>0), m + (c>0) # redistribute mantissa to exponent ... return "%.*fE%0*d" % (mantplaces, sign * 10**c, expplaces, m) ... >>> >>> def test_format(n): ... for exp in range(-5, 5): ... N = n*(10**exp) ... print format(n*(10**exp)) ... >>> test_format(234.56789) 0.234567890E-2 0.234567890E-1 0.234567890E00 0.234567890E01 0.234567890E02 0.234567890E03 0.234567890E04 0.234567890E05 0.234567890E06 0.234567890E07 >>> Michael -- http://mail.python.org/mailman/listinfo/python-list