Finding field widths of floats for neat printing
Scott David Daniels
Scott.Daniels at Acm.Org
Thu Apr 3 23:22:23 EST 2003
Andrew Gregory wrote:
> I want to write lists of floating point numbers to text files in neat
> columns with decimal points aligned, right-hand edges straight (rather
> than ragged), and without unnecessary trailing zeros, e.g.
> 1.1 -34.67 0.006
> 2.0 -1.05 0.010
> etc.
>
> In order to do this I need to loop through the lists of numbers for
> each column to find the field sizes m and n need to achieve this. I
> can then produce a format specifier string (fss) for each column,
> e.g. fss = "%" + "%i.%if" % (m,n)
>
> Given a number, -34.67 for example is there a SMART Python way of
> determining the field sizes? Obviously I need to work at less than the
> precision of the machine, and ignore the fact that -34.67 might be
> represented as
> -34.6699999999999
>
How about something involving:
import os.path
def reverse(str):
l = list(str)
l.reverse()
return ''.join(l)
numbers = [1.1, 11.77, 23, 107.333]
final = 12 - len(os.path.commonprefix(['0'*12]+
[reverse('%.12f' % x)
for x in numbers])
-Scott David Daniels
Scott.Daniels at Acm.Org
More information about the Python-list
mailing list