Python decimalen formaat

Wat is een goede manier om een python-decimaal op deze manier te formatteren?

1.00 –> ‘1’
1.20 –> ‘1.2’
1.23 –> ‘1.23’
1.234 –> ‘1.23’
1.2345 –> ‘1.23’


Antwoord 1, autoriteit 100%

Als je Python 2.6 of nieuwer hebt, gebruik dan format:

'{0:.3g}'.format(num)

Voor Python 2.5 of ouder:

'%.3g'%(num)

Uitleg:

{0}vertelt formatom het eerste argument af te drukken — in dit geval num.

Alles na de dubbele punt (:) geeft de format_specaan.

.3stelt de precisie in op 3.

gverwijdert onbeduidende nullen. Zien
http://en.wikipedia.org/wiki/Printf#fprintf

Bijvoorbeeld:

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

opbrengst

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

Gebruik Python 3.6 of nieuwer, kunt u f-strings:

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

Antwoord 2, Autoriteit 23%

Alleen eerste deel van het antwoord van Justin is correct.
Het gebruik van “% .3g” werkt niet voor alle gevallen als .3 is niet de precisie, maar het totale aantal cijfers. Probeer het voor cijfers zoals 1000.123 en het breekt.

Dus, ik zou gebruiken wat Justin suggereert:

>>> ('%.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'

Antwoord 3, Autoriteit 11%

Hier is een functie die de truc zal doen:

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

en hier zijn uw voorbeelden:

>>> myformat(1.00)
'1'
>>> myformat(1.20)
'1.2'
>>> myformat(1.23)
'1.23'
>>> myformat(1.234)
'1.23'
>>> myformat(1.2345)
'1.23'

bewerken:

Van kijken naar de antwoorden van andere mensen en experimenteren, ik vond dat g alle strippende dingen voor je doet. Dus,

'%.3g' % x

Werkt ook prachtig en is iets anders dan wat andere mensen suggereren (met ‘{0: .3}’. Formaat () dingen). Ik denk dat je je keuze neemt.


Antwoord 4, Autoriteit 3%

Gebruik gewoon Python’s standaard string formattering methoden :

>>> "{0:.2}".format(1.234232)
'1.2'
>>> "{0:.3}".format(1.234232)
'1.23'

Als u een Python-versie onder 2.6 gebruikt, gebruikt u

>>> "%f" % 1.32423
'1.324230'
>>> "%.2f" % 1.32423
'1.32'
>>> "%d" % 1.32423
'1'

Antwoord 5

U kunt de korte-indelingsstijl nieuw gebruiken in 3.6:

f'''{1.234:.1f}'''
Out: '1.2'

of, als een test:

f'''{1.234:.1f}''' == '1.2'
Out: True

Trouwens, u kunt dit ook met variabelen gebruiken.

x = 1.234
f'''{x:.1f} and {x:.2f} and {x}'''
Out: '1.2 and 1.23 and 1.234'

Other episodes