WAS ist ein guter Weg, um eine Python-Dezimalstelle so zu formatieren?
1,00 -> '1'
1,20 -> '1,2'
1,23 -> '1,23'
1,234 -> '1,23'
1,2345 -> '1,23'
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}
weist format
an, das erste Argument zu drucken - in diesem Fall num
.
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#fprintf
Zum 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'
Exponent notation
. Als {:,2f}.format(number)
Dosis, entfernt aber auch unbedeutende Nullen
num=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'
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.
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'
{:g}
schneidet keine unbedeutenden Nullen von Dezimalstellen ab.