2008-08-22 7 views
87

J'ai besoin de savoir comment formater des nombres en tant que chaînes. Mon code est ici:Mettre en forme des nombres en chaînes en Python

return str(hours)+":"+str(minutes)+":"+str(seconds)+" "+ampm 

Les heures et les minutes sont des nombres entiers et les secondes sont des nombres flottants. La fonction str() convertira tous ces nombres en dixièmes (0.1). Donc, au lieu de ma chaîne de sortie "5: 30: 59.07 pm", il afficherait quelque chose comme "5.0: 30.0: 59.1 pm".

En résumé, quelle bibliothèque/fonction ai-je besoin de faire pour moi?

Répondre

120

Mise en forme en Python se fait via le string formatting (%) operator:

"%02d:%02d:%02d" % (hours, minutes, seconds) 

/Edit: Il y a aussi strftime.

+0

Le code dans la question utilise "str()", le code dans la réponse de Konrad ne le fait pas. Voici donc un exemple simple: 'myFloat = 4.55' ' myString = '% d'% (myFloat) ' ' print myString' –

+0

Pour les autres instances utilisant des flottants (si vous voulez afficher des décimales), vous devez utiliser '% f 'au lieu de'% d' – jocull

+7

@jocull Vrai mais cette méthode est de toute façon déconseillée en faveur de 'str.format', et les chaînes de format fonctionnent différemment. –

1

str() en python sur un entier sera pas imprimer des décimales.

Si vous avez un flotteur que vous voulez ignorer la partie décimale, vous pouvez utiliser str (int (floatValue)).

Peut-être le code suivant démontrera:

>>> str(5) 
'5' 
>>> int(8.7) 
8 
88

À partir de Python 2.6, il existe une alternative: la méthode str.format(). Voici quelques exemples en utilisant l'opérateur de format de chaîne existante (%):

>>> "Name: %s, age: %d" % ('John', 35) 
'Name: John, age: 35' 
>>> i = 45 
>>> 'dec: %d/oct: %#o/hex: %#X' % (i, i, i) 
'dec: 45/oct: 055/hex: 0X2D' 
>>> "MM/DD/YY = %02d/%02d/%02d" % (12, 7, 41) 
'MM/DD/YY = 12/07/41' 
>>> 'Total with tax: $%.2f' % (13.00 * 1.0825) 
'Total with tax: $14.07' 
>>> d = {'web': 'user', 'page': 42} 
>>> 'http://xxx.yyy.zzz/%(web)s/%(page)d.html' % d 
'http://xxx.yyy.zzz/user/42.html' 

Voici les extraits équivalents, mais en utilisant str.format():

>>> "Name: {0}, age: {1}".format('John', 35) 
'Name: John, age: 35' 
>>> i = 45 
>>> 'dec: {0}/oct: {0:#o}/hex: {0:#X}'.format(i) 
'dec: 45/oct: 0o55/hex: 0X2D' 
>>> "MM/DD/YY = {0:02d}/{1:02d}/{2:02d}".format(12, 7, 41) 
'MM/DD/YY = 12/07/41' 
>>> 'Total with tax: ${0:.2f}'.format(13.00 * 1.0825) 
'Total with tax: $14.07' 
>>> d = {'web': 'user', 'page': 42} 
>>> 'http://xxx.yyy.zzz/{web}/{page}.html'.format(**d) 
'http://xxx.yyy.zzz/user/42.html' 

comme Python 2.6+, tous Python 3 versions (jusqu'à présent) comprendre comment faire les deux. Je ai déchiré sans vergogne ce truc directement à partir de my hardcore Python intro book et les diapositives pour l'intro + intermédiaire Python courses I offer de temps en temps. :-)

+1

Je n'ai jamais entendu parler de str.format(). Merci! – legends2k

+5

À mon avis, 'str.format()' est la bonne réponse ici, en particulier ''{: .2f}'. Format (3.145159)'. Bonne réponse! – rickcnagy

+1

https://pyformat.info/ – endolith

1

Si vous avez une valeur qui inclut un nombre décimal, mais la valeur décimale est négligeable (par exemple: 100,0) et essayez de int cela, vous obtiendrez une erreur. Cela semble stupide, mais l'appel flotteur fixe d'abord ceci.

str (int (float ([variable])))

+0

Comment est votre "réponse" liée à la question? – SilentGhost

+1

@SilentGhost est correct: plutôt qu'une autre "réponse", cette réponse aurait dû être envoyée en commentaire à l'OP. – wescpy

2

Vous pouvez utiliser ci-dessous pour obtenir la fonctionnalité souhaitée

"%d:%d:d" % (hours, minutes, seconds) 
4

En Python 2.6+, il est possible d'utiliser la fonction format(), donc dans votre cas, vous pouvez utiliser:

return '{:02d}:{:02d}:{:.2f} {}'.format(hours, minutes, seconds, ampm) 

Il existe de multiples façons d'utiliser cette fonction, donc pour plus d'informations vous pouvez consulter le documentation.

Questions connexes