แสดงทศนิยมสองตำแหน่งใน Python


144

ฉันมีฟังก์ชันที่รับอาร์กิวเมนต์แบบลอย (โดยทั่วไปจะเป็นจำนวนเต็มหรือทศนิยมที่มีเลขนัยสำคัญหนึ่งหลัก) และฉันจำเป็นต้องส่งออกค่าในสตริงที่มีทศนิยมสองตำแหน่ง (5 -> 5.00, 5.5 -> 5.50 เป็นต้น) ฉันจะทำสิ่งนี้ใน Python ได้อย่างไร

คำตอบ:


153

คุณสามารถใช้ตัวดำเนินการจัดรูปแบบสตริงสำหรับสิ่งนั้น:

>>> '%.2f' % 1.234
'1.23'
>>> '%.2f' % 5.0
'5.00'

ผลลัพธ์ของตัวดำเนินการคือสตริงดังนั้นคุณสามารถเก็บไว้ในตัวแปรพิมพ์และอื่น ๆ


279

เนื่องจากโพสต์นี้อาจอยู่ที่นี่สักพักหนึ่งให้ชี้ให้เห็นไวยากรณ์ของ python 3:

"{:.2f}".format(5)

9
เพื่อความสมบูรณ์หากทศนิยมเป็นตัวแปรเช่นd=3ไวยากรณ์คือ"{:.{}f}".format(5, d)
jurajb

83

การจัดรูปแบบf-string :

นี่เป็นสิ่งใหม่ใน Python 3.6 - สตริงจะอยู่ในเครื่องหมายคำพูดตามปกติโดยนำหน้าด้วยf'...วิธีเดียวกับที่คุณr'...ทำกับสตริงดิบ จากนั้นคุณวางสิ่งที่คุณต้องการใส่ไว้ในสตริงตัวแปรตัวเลขภายในวงเล็บปีกกาf'some string text with a {variable} or {number} within that text'- และ Python จะประเมินเช่นเดียวกับวิธีการจัดรูปแบบสตริงก่อนหน้านี้ยกเว้นว่าวิธีนี้อ่านได้ง่ายกว่ามาก

>>> foobar = 3.141592
>>> print(f'My number is {foobar:.2f} - look at the nice rounding!')

My number is 3.14 - look at the nice rounding!

คุณสามารถดูได้ในตัวอย่างนี้เราจัดรูปแบบด้วยตำแหน่งทศนิยมในลักษณะเดียวกับวิธีการจัดรูปแบบสตริงก่อนหน้านี้

NB สามารถเป็นจำนวนตัวแปรหรือแม้กระทั่งเช่นการแสดงออกfoobarf'{3*my_func(3.14):02f}'

นับจากนี้ไปด้วยรหัสใหม่ฉันชอบ f-strings มากกว่าวิธีการทั่วไป% s หรือ str.format () เนื่องจาก f-strings สามารถอ่านได้ไกลกว่าและมักจะเร็วกว่ามาก


6

การจัดรูปแบบสตริง:

print "%.2f" % 5

1
แต่ทั้งหมดนี้เป็นสตริงดังนั้นฉันจึงไม่สามารถทำการคำนวณทางคณิตศาสตร์ใด ๆ กับพวกเขาได้
itsaruns

@itsaruns การเพิ่มตำแหน่งทศนิยมว่างเปล่าจะไม่สร้างความแตกต่างหากคุณต้องการดำเนินการทางคณิตศาสตร์กับพวกเขา คุณอาจจะมองหาmath.floor, math.ceilหรือround
สตีSchütt

6

การจัดรูปแบบสตริง:

a = 6.789809823
print('%.2f' %a)

หรือ

print ("{0:.2f}".format(a)) 

สามารถใช้ฟังก์ชัน Round:

print(round(a, 2))

สิ่งที่ดีเกี่ยวกับ round () คือเราสามารถเก็บผลลัพธ์นี้ไว้ในตัวแปรอื่นแล้วใช้เพื่อวัตถุประสงค์อื่น

b = round(a, 2)
print(b)

5
โหวตให้round. ไม่ควรใช้เพื่อการแสดงผลเท่านั้น
Wim

@ ฉันเคารพความคิดเห็นของคุณ แต่คำตอบนี้เป็นเพียงเพื่อตอบสนองความต้องการของใครบางคน
debaonline4u

2
@ debaonline4u วิมอยู่พอดี round(5.0001, 2)-> 5.0ไม่ใช่'5.00'
wjandrea



3

หากคุณต้องการเปลี่ยนตัวเลขจริงๆแทนที่จะแสดงเพียงอย่างเดียวให้ใช้รูปแบบ ()

จัดรูปแบบเป็นทศนิยม 2 ตำแหน่ง:

format(value, '.2f')

ตัวอย่าง:

>>> format(5.00000, '.2f')
'5.00'

0

ฉันรู้ว่ามันเป็นคำถามเก่า แต่ฉันก็ดิ้นรนหาคำตอบด้วยตัวเอง นี่คือสิ่งที่ฉันคิดขึ้นมา:

Python 3:

>>> num_dict = {'num': 0.123, 'num2': 0.127}
>>> "{0[num]:.2f}_{0[num2]:.2f}".format(num_dict) 
0.12_0.13

3
สวัสดียินดีต้อนรับสู่ Stack Overflow เมื่อตอบคำถามที่มีคำตอบมากมายแล้วโปรดอย่าลืมเพิ่มข้อมูลเชิงลึกเพิ่มเติมว่าเหตุใดคำตอบที่คุณให้จึงมีความสำคัญและไม่เพียงสะท้อนสิ่งที่ผู้โพสต์ตรวจสอบแล้ว นี่เป็นสิ่งสำคัญอย่างยิ่งในคำตอบแบบ "โค้ดเท่านั้น" เช่นคำตอบที่คุณระบุ
chb


-1

หากคุณต้องการรับค่าทศนิยมสองตำแหน่งที่ จำกัด ในขณะที่เรียกอินพุต

ลองดูสิ ~

a = eval(format(float(input()), '.2f'))   # if u feed 3.1415 for 'a'.
print(a)                                  # output 3.14 will be printed.

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