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.