2014-09-11 10 views
7

Ich möchte meine Python (2.4.3) -Ausgangsnummern in einem bestimmten Format haben. Wenn die Zahl eine abschließende Dezimalzahl mit < = 6 signifikanten Ziffern ist, zeigen Sie das alles an. Wenn es jedoch> 6 signifikante Ziffern hat, dann geben Sie nur 6 signifikante Ziffern aus.Wie lässt sich das Python-Format mit einer bestimmten Anzahl signifikanter Stellen schweben lassen?

"A" zeigt, wie Python die Floats schreibt. "B" zeigt, wie ich sie geschrieben habe. Wie kann ich Python meine Zahlen auf diese Weise formatieren?

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 
+0

Floats fehlt die erforderliche Präzision, um dies zu ermöglichen. –

+0

_ "Format dezimal" _ - Ich denke, du meinst "Format float", weil ['Decimal'] (https://docs.python.org/2/library/decimal.html) eine Bibliothek in Python ist. –

+0

@BurhanKhalid ja, du hast Recht. – user1145925

Antwort

17

Sie werden den g Modifikator für format wollen, die unbedeutende Nullen fällt;

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

Sorry, enthält mein Update auch die Tatsache, dass ich mit Python 2.4.3, die nicht-Format hat() Funktion eingeschränkt bin.

Die Formatbezeich funktionieren auch ohne die .format() Funktion:

>>> 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 
+0

Aktualisiert meine Frage mit eine große Zahl im Beispiel auch – user1145925

+0

@ user1145925 Soweit ich sehen kann, gibt das Format Ihre genaue 'B' Ausgabe. –

+0

Entschuldigung, mein Update enthält auch die Tatsache, dass ich auf die Verwendung von Python 2.4.3 beschränkt bin, das keine format() -Funktion hat. – user1145925

2

versuchen auf diese Weise

a=[10188469102.605597,5.5657188485,3.539,22.1522612479,0,15.9638450858,0.284024,7.58096703786,24.3469152383] 

for i in a: 
    if i >100: 
     print '{:.6e}'.format(i) 
    else: 
     print '{:.6f}'.format(i) 

für niedrigere Version von Python

for i in a: 
    if i >100: 
     print '%6e'%i 
    else: 
     print '%6f'%i 

Ausgang

012.351.
1.018847e+10 
5.565719 
3.539000 
22.152261 
0.000000 
15.963845 
0.284024 
7.580967 
24.346915 
+0

Ich kann die format() -Funktion nicht verwenden. Das ist für Python 2.4.3 nicht verfügbar. – user1145925