Es scheint, dass dies Python 2.7 veranlasst, in die wissenschaftliche Notation für größere Zahlen zu wechseln: >>> "{0: .3g}". Format (100.20) '100' >>> "{0: .3g}". Format (1001.20 ) '1e + 03'
vdboor
4
Also, wie man nein setzt Exponent notation. Als {:,2f}.format(number)Dosis, entfernt aber auch unbedeutende Nullen
Aylwyn Lake
1
@unutbu - Irgendeine Idee, wie man '{0: .3g}' für Python fStrings zum Laufen bringt?
Scott Skiles
1
@ScottSkiles: Gibt num=1.2345; f'{num:.3g}'zurück '1.23'. Siehe diese Erklärung der Codeäquivalenz .
Unutbu
Genial! Lohnt sich eine Bearbeitung dieser Antwort? Ich habe das woanders auf SO gefunden.
Scott Skiles
25
Nur der erste Teil von Justins Antwort ist richtig. Die Verwendung von "% .3g" funktioniert nicht in allen Fällen, da .3 nicht die Genauigkeit, sondern die Gesamtzahl der Ziffern ist. Versuchen Sie es für Zahlen wie 1000.123 und es bricht.
Als ich mir die Antworten anderer Leute ansah und experimentierte, stellte ich fest, dass g das ganze Strippen für Sie erledigt. Damit,
'%.3g' % x
funktioniert auch hervorragend und unterscheidet sich geringfügig von dem, was andere Leute vorschlagen (mit '{0: .3}'. format () Zeug). Ich denke, treffen Sie Ihre Wahl.
{:g}
schneidet keine unbedeutenden Nullen von Dezimalstellen ab.Antworten:
Wenn Sie Python 2.6 oder neuer haben, verwenden Sie
format
:'{0:.3g}'.format(num)
Für Python 2.5 oder älter:
'%.3g'%(num)
Erläuterung:
{0}
weistformat
an, das erste Argument zu drucken - in diesem Fallnum
.Alles nach dem Doppelpunkt (:) gibt das an
format_spec
..3
setzt die Genauigkeit auf 3.g
Entfernt unbedeutende Nullen. Siehe http://en.wikipedia.org/wiki/Printf#fprintfZum Beispiel:
tests=[(1.00, '1'), (1.2, '1.2'), (1.23, '1.23'), (1.234, '1.23'), (1.2345, '1.23')] for num, answer in tests: result = '{0:.3g}'.format(num) if result != answer: print('Error: {0} --> {1} != {2}'.format(num, result, answer)) exit() else: print('{0} --> {1}'.format(num,result))
ergibt
1.0 --> 1 1.2 --> 1.2 1.23 --> 1.23 1.234 --> 1.23 1.2345 --> 1.23
Mit Python 3.6 oder neuer können Sie Folgendes verwenden
f-strings
:In [40]: num = 1.234; f'{num:.3g}' Out[40]: '1.23'
quelle
Exponent notation
. Als{:,2f}.format(number)
Dosis, entfernt aber auch unbedeutende Nullennum=1.2345; f'{num:.3g}'
zurück'1.23'
. Siehe diese Erklärung der Codeäquivalenz .Nur der erste Teil von Justins Antwort ist richtig. Die Verwendung von "% .3g" funktioniert nicht in allen Fällen, da .3 nicht die Genauigkeit, sondern die Gesamtzahl der Ziffern ist. Versuchen Sie es für Zahlen wie 1000.123 und es bricht.
Also würde ich verwenden, was Justin vorschlägt:
>>> ('%.4f' % 12340.123456).rstrip('0').rstrip('.') '12340.1235' >>> ('%.4f' % -400).rstrip('0').rstrip('.') '-400' >>> ('%.4f' % 0).rstrip('0').rstrip('.') '0' >>> ('%.4f' % .1).rstrip('0').rstrip('.') '0.1'
quelle
Hier ist eine Funktion, die den Trick macht:
def myformat(x): return ('%.2f' % x).rstrip('0').rstrip('.')
Und hier sind Ihre Beispiele:
>>> myformat(1.00) '1' >>> myformat(1.20) '1.2' >>> myformat(1.23) '1.23' >>> myformat(1.234) '1.23' >>> myformat(1.2345) '1.23'
Bearbeiten:
Als ich mir die Antworten anderer Leute ansah und experimentierte, stellte ich fest, dass g das ganze Strippen für Sie erledigt. Damit,
'%.3g' % x
funktioniert auch hervorragend und unterscheidet sich geringfügig von dem, was andere Leute vorschlagen (mit '{0: .3}'. format () Zeug). Ich denke, treffen Sie Ihre Wahl.
quelle
Verwenden Sie einfach Pythons Standard- Formatierungsmethoden für Zeichenfolgen :
>>> "{0:.2}".format(1.234232) '1.2' >>> "{0:.3}".format(1.234232) '1.23'
Wenn Sie eine Python-Version unter 2.6 verwenden, verwenden Sie
>>> "%f" % 1.32423 '1.324230' >>> "%.2f" % 1.32423 '1.32' >>> "%d" % 1.32423 '1'
quelle