85 votes

Format décimal Python

Quelle est une bonne façon de formater une décimale python comme ça?

1,00 -> '1'
1,20 -> '1,2'
1,23 -> '1,23'
1.234 -> '1.23'
1,2345 -> '1,23'

134voto

unutbu Points 222216

Si vous avez Python 2.6 ou version plus récente, utilisez format:

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

Pour Python 2.5 ou plus:

'%.3g'%(num)

Explication:

{0}dit format d'imprimer le premier argument, dans ce cas, num.

Tout ce qui est après le deux-points (:) spécifie l' format_spec.

.3 détermine la précision à 3.

g supprime négligeable des zéros. Voir http://en.wikipedia.org/wiki/Printf#fprintf

Par exemple:

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

les rendements

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

30voto

blackdaemon Points 81

Seule la première partie de la réponse de Justin est correcte. L'utilisation de "% .3g" ne fonctionnera pas dans tous les cas car .3 n'est pas la précision, mais le nombre total de chiffres. Essayez-le pour des nombres comme 1000.123 et ça casse.

Donc, j'utiliserais ce que Justin suggère:

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

14voto

Justin Peel Points 17348

Voici une fonction qui fera l'affaire:

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

Et voici vos exemples:

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

Éditer:

En regardant les réponses des autres et en expérimentant, j'ai trouvé que g faisait tout le truc pour vous. Donc,

 '%.3g' % x
 

fonctionne aussi très bien et est légèrement différent de ce que les autres suggèrent (en utilisant des trucs '{0: .3}'. format ()). Je suppose que tu fais ton choix.

5voto

voyager Points 17283

Utilisez simplement les méthodes de formatage de chaînes standard de Python:

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

Si vous utilisez une version Python sous 2.6, utilisez

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X