Search code examples
pythonstringnumber-formattingpython-2.4

How to make Python format floats with certain amount of significant digits?


I want my Python (2.4.3) output numbers to have a certain format. Specifically, if the number is a terminating decimal with <= 6 significant digits, show it all. However, if it has > 6 significant digits, then output only 6 significant digits.

"A" shows how Python is writing the floats. "B" shows how I want them written. How can I make Python format my numbers in that way?

A:
10188469102.605597
5.5657188485
3.539
22.1522612479
0
15.9638450858
0.284024
7.58096703786
24.3469152383

B:
1.01885e+10
5.56572
3.539
22.1523
0
15.9638
0.284024
7.58097
24.3469

Solution

  • You'll want the g modifier for format that drops insignificant zeroes;

    >>> "{0:.6g}".format(5.5657188485)
    '5.56572'
    >>> "{0:.6g}".format(3.539)
    '3.539'
    

    Sorry, my update also includes the fact that I am restricted to using Python 2.4.3, which does not have format() function.

    The format specifiers work even without the .format() function:

    >>> for i in a:
    ...    print '%.6g' % (i,)
    ...
    1.01885e+10
    5.56572
    3.539
    22.1523
    0
    15.9638
    0.284024
    7.58097
    24.3469