วิธีการฟอร์แมตตัวเลขลอยตัวเป็นความกว้างคงที่ใน Python


322

ฉันจะฟอร์แมตตัวเลขลอยเป็นความกว้างคงที่ด้วยข้อกำหนดต่อไปนี้:

  1. นำหน้าศูนย์ถ้า n <1
  2. เพิ่มศูนย์ทศนิยมต่อท้ายเพื่อเติมความกว้างคงที่
  3. ตัดทศนิยมหลักผ่านความกว้างคงที่
  4. จัดตำแหน่งทศนิยมทั้งหมด

ตัวอย่างเช่น:

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

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

ผลลัพธ์จะเป็นเช่นนั้น

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000

คำตอบ:


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

พิมพ์

   23.2300
    0.1233
    1.0000
    4.2230
 9887.2000

ตัวระบุรูปแบบภายในวงเล็บปีกกาตามไวยากรณ์สตริงรูปแบบหลาม โดยเฉพาะในกรณีนี้มันประกอบด้วยส่วนต่าง ๆ ดังต่อไปนี้:

  • สตริงที่ว่างเปล่าก่อนที่จะหมายถึงลำไส้ใหญ่ "ใช้อาร์กิวเมนต์ที่จัดไว้ให้ติดกับformat()" - ในกรณีนี้xเป็นอาร์กิวเมนต์เท่านั้น
  • 10.4fส่วนหนึ่งหลังจากที่ลำไส้ใหญ่เป็นกำหนดรูปแบบ
  • fหมายถึงโน้ตจุดคงที่
  • นี่10คือความกว้างทั้งหมดของฟิลด์ที่ถูกพิมพ์โดยเว้นช่องว่างไว้
  • 4คือจำนวนตัวเลขหลังจุดทศนิยมที่

12
ดังนั้นฉันเข้าใจว่า 4f หมายถึง จำกัด ทศนิยมไว้ที่ 4 (ด้วยศูนย์ต่อท้าย) แต่ 10 หมายถึงอะไร นั่นหมายความว่าการจัดรูปแบบนี้จะไม่ทำงานกับจำนวนเต็มมากกว่า 9999999999 (สิบเก้า) หรือไม่ แค่สงสัย.
hobbes3

55
10.4หมายถึงความกว้าง 10 อักขระและความแม่นยำของทศนิยม 4 ตำแหน่ง
MRAB

13
@ hobbes3: 10เป็นความกว้างของเขตข้อมูลขั้นต่ำคือความยาวต่ำสุดของสตริงที่พิมพ์ หมายเลขเป็นค่าเริ่มต้นจัดชิดขวาและมีช่องว่าง - ดูเอกสารประกอบสำหรับรายละเอียดเพิ่มเติม
Sven Marnach

9
สำหรับ Pythons ก่อน 2.7:("%0.4f" % x).rjust(10)
Steven Rumbalski

22
@StevenRumbalski: "%10.4f" % xหรือเพียงแค่ ในหลาม 2.6, "{0:10.4f}".format(x)คุณยังสามารถใช้
Sven Marnach

88

ไม่กี่ปีที่ผ่านมาตั้งแต่ตอบคำถามนี้ แต่ตั้งแต่ Python 3.6 ( PEP498 ) คุณสามารถใช้สิ่งใหม่f-strings:

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

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

พิมพ์:

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000

2
โปรดทราบว่าความกว้างยังมีอักขระจุด ดังนั้นหากคุณระบุ 9 ให้เป็นความกว้างจะใช้ 1 ในการพิมพ์จุดส่วนอีก 8 จะเป็นการพิมพ์ตัวเลขและช่องว่าง
off99555

37

ใน python3 การทำงานต่อไปนี้:

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

สิ่งนี้มีการเปลี่ยนแปลงใน 4 ปีที่ผ่านมาขณะนี้%การจัดรูปแบบเป็นวิธีการจัดรูปแบบที่เก่าแก่ที่สุด สำหรับสาเหตุหลายประการที่ใช้str.formatหรือเป็นที่ต้องการมากกว่าf-strings %ก่อนหน้านี้เมื่อมันเป็นเพียงstr.formatคนมีเหตุผลบางอย่าง แต่f-stringsแก้ไขหลุมที่ มินิภาษารูปแบบเอกสาร , ตัวอย่าง str.format จากเอกสารและF-สตริงตัวอย่างตัวอักษรในเอกสาร
ninMonkey


6

คุณสามารถทิ้งแผ่นไว้ด้วยศูนย์ ตัวอย่างเช่นหากคุณต้องการnumberมีความยาว 9 ตัวอักษรใช้เบาะด้านซ้ายเป็นศูนย์ใช้:

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

ดังนั้นถ้าnumber = 4.656ผลลัพธ์คือ:00004.656

ตัวอย่างของคุณผลลัพธ์จะเป็นดังนี้:

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

พิมพ์:

00023.2300
00000.1233
00001.0000
00004.2230
09887.2000

ตัวอย่างหนึ่งที่สิ่งนี้มีประโยชน์คือเมื่อคุณต้องการแสดงรายการชื่อไฟล์อย่างถูกต้องตามลำดับตัวอักษร ฉันสังเกตเห็นในบางระบบลินุกซ์จำนวนคือ: 1,10,11, .. 2,20,21, ...

ดังนั้นหากคุณต้องการบังคับใช้คำสั่งตัวเลขที่จำเป็นในชื่อไฟล์คุณจะต้องใช้แผ่นด้านซ้ายพร้อมเลขศูนย์ที่เหมาะสม


2

ใน Python 3

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

6.1fหมายถึงหลังจากที่จุด 1 ตัวเลขแสดงว่าคุณพิมพ์ 2 หลักหลังจุดที่คุณควร%6.2fเช่นที่%6.3f3 เลขพิมพ์หลังจากจุด


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.