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

user1145925 picture user1145925 · Sep 11, 2014 · Viewed 38.5k times · Source

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

Answer

Joachim Isaksson picture Joachim Isaksson · Sep 11, 2014

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