web-dev-qa-db-de.com

Python Dezimalzahlenformat

WAS ist ein guter Weg, um eine python dezimal so zu formatieren?

1.00 -> '1'
1.20 -> '1.2'
1.23 -> '1.23'
1.234 -> '1.23'
1.2345 -> '1.23'

62
juanefren

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 den format_spec An.

.3 Setzt die Genauigkeit auf 3.

g entfernt unbedeutende Nullen. Siehe http://en.wikipedia.org/wiki/Printf#fprintf

Beispielsweise:

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))

ausbeuten

1.0 --> 1
1.2 --> 1.2
1.23 --> 1.23
1.234 --> 1.23
1.2345 --> 1.23

Wenn Sie Python 3.6 oder neuer verwenden, können Sie f-strings verwenden:

In [40]: num = 1.234; f'{num:.3g}'
Out[40]: '1.23'
102
unutbu

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 Stellen ist. Versuchen Sie es für Zahlen wie 1000.123 und es bricht.

Also würde ich das 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'
21
blackdaemon

Hier ist eine Funktion, die den Trick macht:

def myformat(x):
    return ('%.2f' % x).rstrip('0').rstrip('.')

Und hier sind deine 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 alles für dich erledigt. So,

'%.3g' % x

funktioniert auch prächtig und unterscheidet sich geringfügig von den Vorschlägen anderer Leute (die '{0: .3}'. format () verwenden). Ich nehme an, Sie treffen Ihre Wahl.

12
Justin Peel

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'
4
Esteban Küber