แปลงหมายเลขทศนิยมเป็นความแม่นยำแน่นอนแล้วคัดลอกไปยังสตริง


144

135.12345678910ฉันมีจำนวนจุดลอยกล่าวว่า ฉันต้องการที่จะเชื่อมค่าที่เป็นสตริง 135.123456789แต่เพียงต้องการ ด้วยการพิมพ์ฉันสามารถทำสิ่งนี้ได้อย่างง่ายดายโดยทำสิ่งที่ชอบ:

print "%.9f" % numvar

ด้วยnumvarการเป็นหมายเลขเดิมของฉัน มีวิธีง่ายๆในการทำเช่นนี้หรือไม่?


3
% ทำอย่างนั้นอย่างแน่นอน -% ไม่ได้เป็นส่วนหนึ่งของฟังก์ชั่นการพิมพ์ แต่เป็นของสตริง - ดูเอกสาร Python
michael_s

คำตอบ:


177

ด้วย Python <3 (เช่น 2.6 [ดูความคิดเห็น] หรือ 2.7) มีสองวิธีในการทำเช่นนั้น

# Option one
older_method_string = "%.9f" % numvar

# Option two
newer_method_string = "{:.9f}".format(numvar)

แต่ทราบว่าสำหรับงูหลามรุ่นข้างต้น 3 (เช่น 3.2 หรือ 3.3) ตัวเลือกที่สองคือการแนะนำ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกที่สองผมขอแนะนำลิงค์นี้ในการจัดรูปแบบสตริงจากเอกสารหลาม

และสำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกหนึ่งที่ลิงค์นี้จะพอเพียงและมีข้อมูลเกี่ยวกับธงต่างๆ

Python 3.6 (เปิดตัวอย่างเป็นทางการในเดือนธันวาคม 2559) เพิ่มfตัวอักษรสตริงดูข้อมูลเพิ่มเติมที่นี่ซึ่งขยายstr.formatวิธีการ (การใช้วงเล็บปีกกาเช่นที่f"{numvar:.9f}"แก้ปัญหาเดิม) นั่นคือ

# Option 3 (versions 3.6 and higher)
newest_method_string = f"{numvar:.9f}"

แก้ปัญหา ตรวจสอบ @ คำตอบหรือ-ด้วนสำหรับข้อมูลเพิ่มเติม แต่วิธีนี้เป็นไปอย่างรวดเร็ว


1
ตัวเลือกที่สองควรเป็นnewer_method_string = "{:.9f}".format(numvar)- โปรดทราบว่าจำเป็นต้อง:แยกฟิลด์และการจัดรูปแบบ ฉันได้ทดสอบสิ่งนี้กับ 2.7.5 แล้ว
Caltor

1
สำหรับ python 2.6 ตัวเลือกที่สองควรเป็นnewer_method_string = "{0:.9f}".format(numvar)- ให้จดบันทึก 0 ที่จำเป็นสำหรับ field_name สำหรับเวอร์ชันเก่ากว่านี้
ttq

56

Python 3.6

เพียงเพื่อให้ชัดเจนคุณสามารถใช้การจัดรูปแบบf-string สิ่งนี้มีไวยากรณ์เกือบจะเหมือนกันกับformatเมธอด แต่ทำให้มันดีขึ้นเล็กน้อย

ตัวอย่าง:

print(f'{numvar:.9f}')

อ่านเพิ่มเติมเกี่ยวกับสตริง f ใหม่:

นี่คือไดอะแกรมของเวลาดำเนินการของวิธีการทดสอบที่หลากหลาย (จากลิงก์สุดท้ายด้านบน):

เวลาดำเนินการ



8

มันไม่ใช่การพิมพ์ที่ใช้การจัดรูปแบบมันเป็นคุณสมบัติของสตริงดังนั้นคุณจึงสามารถใช้งานได้

newstring = "%.9f" % numvar

หรือใช้การจัดรูปแบบสไตล์ใหม่ valueString = "{:. 9f}". รูปแบบ (หมายเลข)
Zaren

8

ในกรณีที่ไม่ทราบความแม่นยำจนกระทั่งใช้งานได้ตัวเลือกการจัดรูปแบบอื่น ๆ นี้มีประโยชน์:

>>> n = 9
>>> '%.*f' % (n, numvar)
'135.123456789'

3
หากคุณต้องการที่จะใช้.format-method '{:.{n}f}'.format(numvar,n=n)ทราบว่านี้ยังสามารถทำได้โดยการขัดแย้งรังเช่นดังนั้น:
nivk

2

ในการตั้งค่าความแม่นยำด้วยตัวเลข 9 หลักให้ได้รับ:

print "%.9f" % numvar

คืนความแม่นยำด้วยตัวเลข 2 หลัก:

print "%.2f" % numvar 

ส่งคืนความแม่นยำด้วยตัวเลข 2 หลักและค่าที่แปลงแล้ว:

numvar = 4.2345
print float("%.2f" % numvar) 

-2

strฟังก์ชั่นที่มีข้อผิดพลาด กรุณาลองดังต่อไปนี้ คุณจะเห็น '0,196553' แต่ผลลัพธ์ที่ถูกต้องคือ '0,196554' เนื่องจากstrค่าเริ่มต้นของฟังก์ชันคือ ROUND_HALF_UP

>>> value=0.196553500000 
>>> str("%f" % value).replace(".", ",")

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