Quel est le bon moyen de formater une décimale python) de cette façon?
1,00 -> '1'
1.20 -> '1.2'
1.23 -> '1.23'
1.234 -> '1.23'
1.2345 -> '1.23'
Si vous avez Python 2.6 ou plus récent, utilisez format
):
'{0:.3g}'.format(num)
Pour Python 2.5 ou plus ancien:
'%.3g'%(num)
Explication:
{0}
tells format
pour imprimer le premier argument - dans ce cas, num
.
Tout ce qui suit les deux points (:) spécifie le format_spec
.
.3
définit la précision sur 3.
g
supprime les zéros non significatifs. 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
En utilisant Python 3.6 ou plus récent, vous pourriez utiliser f-strings
:
In [40]: num = 1.234; f'{num:.3g}'
Out[40]: '1.23'
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 avec des nombres comme 1000.123 et ça casse.
Donc, je voudrais utiliser 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'
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'
Edit:
En regardant les réponses des autres et en expérimentant, j'ai trouvé que g faisait tout le travail de décapage pour vous. Alors,
'%.3g' % x
fonctionne à merveille aussi et est légèrement différent de ce que suggèrent d’autres personnes (utilisation de la fonction '{0: .3}'. format ()). Je suppose que faites votre choix.
Utilisez simplement le standard Python méthodes de formatage de chaîne :
>>> "{0:.2}".format(1.234232)
'1.2'
>>> "{0:.3}".format(1.234232)
'1.23'
Si vous utilisez une version de Python sous 2.6, utilisez
>>> "%f" % 1.32423
'1.324230'
>>> "%.2f" % 1.32423
'1.32'
>>> "%d" % 1.32423
'1'