web-dev-qa-db-fra.com

Comment formater un nombre flottant en largeur fixe dans Python

Comment formater un nombre flottant à une largeur fixe avec les exigences suivantes:

  1. Point zéro si n <1
  2. Ajouter des zéros décimaux finaux pour remplir une largeur fixe
  3. Tronquer les chiffres décimaux au-delà de la largeur fixe
  4. Aligner tous les points décimaux

Par exemple:

% formatter something like '{:06}'
numbers = [23.23, 0.123334987, 1, 4.223, 9887.2]

for number in numbers:
    print formatter.format(number)

La sortie serait comme

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000
263
hobbes3
for x in numbers:
    print "{:10.4f}".format(x)

empreintes

   23.2300
    0.1233
    1.0000
    4.2230
 9887.2000

Le spécificateur de format entre accolades suit le syntaxe de chaîne de format Python . Plus précisément, dans ce cas, il comprend les parties suivantes:

  • La chaîne vide avant les deux points signifie "prendre l'argument fourni suivant pour format()" - dans ce cas, la x comme seul argument.
  • La partie 10.4f après les deux points est le spécification de format .
  • Le f désigne la notation en point fixe.
  • Le 10 est la largeur totale du champ en cours d'impression, complété par des espaces.
  • Le 4 est le nombre de chiffres après le point décimal.
426
Sven Marnach

Cela fait quelques années que cette question n'a pas été résolue, mais à partir de Python 3.6 ( PEP498 ), vous pouvez utiliser le nouveau f-strings:

numbers = [23.23, 0.123334987, 1, 4.223, 9887.2]

for number in numbers:
    print(f'{number:9.4f}')

Impressions:

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000
45
artomason

En python3 les travaux suivants:

>>> v=10.4
>>> print('% 6.2f' % v)
  10.40
>>> print('% 12.1f' % v)
        10.4
>>> print('%012.1f' % v)
0000000010.4
32
Scott Roberts

Voir Python 3.x syntaxe de chaîne de format :

IDLE 3.5.1   
numbers = ['23.23', '.1233', '1', '4.223', '9887.2']

for x in numbers:  
    print('{0: >#016.4f}'. format(float(x)))  

     23.2300
      0.1233
      1.0000
      4.2230
   9887.2000
7
readyleader

Vous pouvez aussi laisser un pavé avec des zéros. Par exemple, si vous voulez que number ait une longueur de 9 caractères, complétée à gauche par des zéros, utilisez:

print('{:09.3f}'.format(number))

Ainsi, si number = 4.656, le résultat est: 00004.656

Pour votre exemple, la sortie ressemblera à ceci:

numbers  = [23.2300, 0.1233, 1.0000, 4.2230, 9887.2000]
for x in numbers: 
    print('{:010.4f}'.format(x))

impressions:

00023.2300
00000.1233
00001.0000
00004.2230
09887.2000

Cela peut être utile, par exemple, lorsque vous souhaitez répertorier correctement les noms de fichiers par ordre alphabétique. J'ai remarqué que dans certains systèmes Linux, le nombre est: 1,10,11, .. 2,20,21, ...

Ainsi, si vous souhaitez appliquer l'ordre numérique nécessaire aux noms de fichiers, vous devez laisser un pavé gauche avec le nombre de zéros approprié.

1
elcymon

Dans Python 3.

GPA = 2.5
print(" %6.1f " % GPA)

6.1f signifie qu'après les points, 1 chiffre indique que si vous imprimez 2 chiffres après les points, vous ne devez que %6.2f tel que %6.3f 3 chiffres s'impriment après le point.

0
Usman Zia