Kayan bir sayı Python'da sabit genişliğe nasıl biçimlendirilir


322

Kayan bir sayıyı aşağıdaki gereksinimlerle sabit bir genişliğe nasıl biçimlendiririm:

  1. N <1 ise sıfır
  2. Sabit genişliği doldurmak için izleyen ondalık sıfır (lar) ı ekleyin
  3. Ondalık basamakları sabit genişlikten kes
  4. Tüm ondalık noktaları hizala

Örneğin:

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

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

Çıktı şöyle olurdu

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000

Yanıtlar:


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

baskılar

   23.2300
    0.1233
    1.0000
    4.2230
 9887.2000

Kıvrık ayraçların içindeki biçim belirtici, Python biçim dizesi sözdizimini izler . Özellikle, bu durumda, aşağıdaki bölümlerden oluşur:

  • İki nokta üst üste işaretinden önceki boş dize "bir sonraki sağlanan bağımsız değişkeni al" anlamına gelir format()- bu durumda xtek argüman olarak.
  • İki 10.4fnokta üst üste işaretinden sonraki kısım biçim belirtimi .
  • fO anlamına gelir sabit nokta gösterimi.
  • Bu 10, yazdırılan alanın boşluklarla doldurulmuş toplam genişliğidir.
  • 4Ondalık hanelerin sayısıdır.

12
Bu yüzden 4f'nin ondalık sayıları 4 ile sınırlamayı temsil ettiğini anlıyorum (sondaki sıfırlarla), ancak 10'un anlamı nedir? Bu, bu biçimlendirmenin 9999999999'dan (on 9) daha büyük tamsayılarla çalışmayacağı anlamına mı geliyor? Sadece merak.
— hobbes3

55
10.410 karakterlik bir genişlik ve 4 ondalık basamağın kesinliği anlamına gelir.
— MRAB

13
@ hobbes3: 10minimum alan genişliği, yani yazdırılan dizenin minimum uzunluğu. Sayılar varsayılan olarak sağa hizalanır ve boşluklarla doldurulur - daha fazla ayrıntı için belgelere bakın.
— Sven Marnach

9
2.7'den önceki ("%0.4f" % x).rjust(10)
— Pythonlar için

22
@StevenRumbalski: Veya basitçe "%10.4f" % x. Python 2.6'da da kullanabilirsiniz "{0:10.4f}".format(x).
— Sven Marnach

88

Bunun yanıtlanmasından bu yana birkaç yıl geçti, ancak Python 3.6'dan ( PEP498 ) itibaren yenisini kullanabilirsiniz f-strings:

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

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

Baskılar:

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000

2
Genişlikte nokta karakteri de bulunduğunu unutmayın. Bu nedenle 9'u genişlik olarak belirtirseniz, noktayı yazdırmak için 1, diğeri 8 basamak ve boşlukları yazdırmak için kullanılır.
— off99555

37

Python3'te aşağıdakiler çalışır:

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

Bu son 4 yılda değişti, şimdi %biçimlendirme en eski biçimlendirme yöntemidir. Birkaç nedenden dolayı str.formatveya f-stringskullanılması tercih edilir %. Daha önce, sadece str.formatinsanların bazı nedenleri vardı ama f-stringsbu deliği düzeltti. biçim mini dil dokümanlar , dokümanlardan str.format örnekler ve dokümanlar f-dize hazır örnekler
— ninMonkey

10

Bkz. Python 3.x biçimi dize sözdizimi :

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

6

Ayrıca pedleri sıfırlarla da kaldırabilirsiniz. Örneğin number, 9 karakter uzunluğuna sahip olmak istiyorsanız , solda sıfırlarla doldurulmuş olarak şunu kullanın:

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

Böylece, eğer number = 4.656çıktı:00004.656

Örneğin, çıktı şu şekilde görünecektir:

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

baskılar:

00023.2300
00000.1233
00001.0000
00004.2230
09887.2000

Bunun yararlı olabileceği bir örnek, dosya adlarını alfabetik sırayla düzgün bir şekilde listelemek istediğiniz zamandır. Bazı linux sistemlerinde fark ettim, sayı: 1,10,11, .. 2,20,21, ...

Bu nedenle, dosya adlarında gerekli sayısal sırayı uygulamak istiyorsanız, uygun sayıda sıfırla sol pad'i kullanmanız gerekir.


2

Python 3'te.

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

6.1fEğer gereken tek nokta sonra 2 rakam yazdırmak eğer noktalar sonra aracı 1 basamak göstermek %6.2föyle ki %6.3f3 basamak noktasından sonra yazdırın.


0

Diziler için benzer bir şeye ihtiyacım vardı. Bu bana yardımcı oldu

some_array_rounded=np.around(some_array, 5)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.