Cara memformat angka mengambang ke lebar tetap di Python

322

Bagaimana cara memformat angka mengambang ke lebar tetap dengan persyaratan berikut:

  1. Leading nol jika n <1
  2. Tambahkan trailing desimal zero (s) untuk mengisi lebar tetap
  3. Potong digit desimal melewati lebar tetap
  4. Sejajarkan semua poin desimal

Sebagai contoh:

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

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

Outputnya akan seperti

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000
hobbes3
sumber

Jawaban:

500
for x in numbers:
    print "{:10.4f}".format(x)

cetakan

   23.2300
    0.1233
    1.0000
    4.2230
 9887.2000

Penentu format di dalam kurung kurawal mengikuti sintaks string format Python . Secara khusus, dalam hal ini, terdiri dari bagian-bagian berikut:

  • The string kosong sebelum sarana usus "mengambil argumen berikutnya diberikan kepada format()" - dalam hal ini xsebagai satu-satunya argumen.
  • Bagian 10.4fsetelah titik dua adalah spesifikasi format .
  • Yang fmenunjukkan notasi titik tetap.
  • Ini 10adalah total lebar bidang yang sedang dicetak, dibiarkan-diisi oleh spasi.
  • Ini 4adalah jumlah digit setelah titik desimal.
Sven Marnach
sumber
12
Jadi saya mengerti bahwa 4f mewakili membatasi desimal ke 4 (dengan trailing nol), tetapi apa artinya 10? Apakah itu berarti pemformatan ini tidak akan berfungsi dengan bilangan bulat yang lebih besar dari 9999999999 (sepuluh 9)? Hanya penasaran.
hobbes3
55
10.4berarti lebar 10 karakter dan ketelitian 4 tempat desimal.
MRAB
13
@ hobbes3: 10adalah lebar bidang minimum, yaitu panjang minimum dari string yang dicetak. Angka-angka secara default disejajarkan dan diisi dengan spasi - lihat dokumentasi untuk detail lebih lanjut.
Sven Marnach
9
Untuk Piton sebelum 2.7:("%0.4f" % x).rjust(10)
Steven Rumbalski
22
@StevenRumbalski: Atau sederhana "%10.4f" % x. Di Python 2.6, Anda juga bisa menggunakan "{0:10.4f}".format(x).
Sven Marnach
88

Sudah beberapa tahun sejak ini dijawab, tetapi pada Python 3.6 ( PEP498 ) Anda bisa menggunakan yang baru f-strings:

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

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

Cetakan:

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000
artomason
sumber
2
Perhatikan bahwa lebarnya juga termasuk karakter titik. Jadi, jika Anda menetapkan 9 sebagai lebar, 1 akan digunakan untuk mencetak titik, 8 lainnya untuk mencetak angka dan spasi.
off99555
37

Dalam python3 berikut ini berfungsi:

>>> v=10.4
>>> print('% 6.2f' % v)
  10.40
>>> print('% 12.1f' % v)
        10.4
>>> print('%012.1f' % v)
0000000010.4
Scott Roberts
sumber
Ini telah berubah dalam 4 tahun terakhir, sekarang %format adalah metode format tertua. Untuk beberapa alasan menggunakan str.formatatau f-stringslebih disukai daripada %. Sebelumnya saat itu sajastr.format , orang memiliki beberapa alasan tetapi f-stringsmemperbaiki lubang itu. format dokumen mini-bahasa , contoh str.format dari docs dan contoh literal f-string dalam dokumen
ninMonkey
10

Lihat sintaks string format Python 3.x :

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
siap pakai
sumber
6

Anda juga dapat meninggalkan pad dengan nol. Misalnya, jika Anda ingin numbermemiliki panjang 9 karakter, kosongkan dengan nol gunakan:

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

Jadi, jika number = 4.656, outputnya adalah:00004.656

Sebagai contoh, hasilnya akan seperti ini:

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

cetakan:

00023.2300
00000.1233
00001.0000
00004.2230
09887.2000

Salah satu contoh di mana ini mungkin berguna adalah ketika Anda ingin mendaftar nama file dengan benar dalam urutan abjad. Saya perhatikan di beberapa sistem linux, jumlahnya adalah: 1,10,11, .. 2,20,21, ...

Jadi, jika Anda ingin menerapkan urutan numerik yang diperlukan dalam nama file, Anda harus meninggalkan pad dengan jumlah nol yang sesuai.

Elcymon
sumber
2

Dalam Python 3.

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

6.1fberarti setelah titik 1 digit menunjukkan jika Anda mencetak 2 digit setelah titik-titik Anda harus hanya %6.2fseperti yang %6.3f3 digit dicetak setelah titik.

Usman Zia
sumber
0

Saya membutuhkan sesuatu yang mirip untuk array. Itu membantu saya

some_array_rounded=np.around(some_array, 5)
Anton
sumber