Hiển thị một float với hai chữ số thập phân trong Python


136

Tôi có một hàm lấy các đối số float (thường là số nguyên hoặc số thập phân có một chữ số có nghĩa) và tôi cần xuất các giá trị trong một chuỗi có hai chữ số thập phân (5 -> 5,00, 5,5 -> 5,50, v.v.). Làm thế nào tôi có thể làm điều này trong Python?

Câu trả lời:


148

Bạn có thể sử dụng toán tử định dạng chuỗi cho điều đó:

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

Kết quả của toán tử là một chuỗi, vì vậy bạn có thể lưu trữ nó trong một biến, in, v.v.


271

Vì bài đăng này có thể ở đây một lúc, nên cũng chỉ ra cú pháp python 3:

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

9
Chỉ để cho đầy đủ, nếu số thập phân là biến, ví dụ d=3, thì cú pháp là"{:.{}f}".format(5, d)
Jurajb

73

định dạng chuỗi f :

Điều này là mới trong Python 3.6 - chuỗi được đặt trong dấu ngoặc kép như bình thường, được thêm vào f'...giống như cách bạn làm r'...với chuỗi thô. Sau đó, bạn đặt bất cứ thứ gì bạn muốn đặt vào trong chuỗi, biến, số, bên trong dấu ngoặc nhọn f'some string text with a {variable} or {number} within that text'- và Python đánh giá như với các phương thức định dạng chuỗi trước đó, ngoại trừ phương thức này dễ đọc hơn nhiều.

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

My number is 3.14 - look at the nice rounding!

Bạn có thể thấy trong ví dụ này, chúng tôi định dạng với các vị trí thập phân theo cách tương tự với các phương thức định dạng chuỗi trước đó.

NB acó thể là một số, biến hoặc thậm chí là một biểu thức, ví dụ f'{3*my_func(3.14):02f}'.

Đi tiếp, với mã mới, tôi thích các chuỗi f hơn các phương thức% s hoặc str.format () phổ biến vì các chuỗi f có thể dễ đọc hơn nhiều và thường nhanh hơn nhiều .


6

Định dạng chuỗi:

print "%.2f" % 5

1
Nhưng tất cả điều này là các chuỗi, vì vậy tôi không thể thực hiện bất kỳ thao tác toán học nào trên chúng
itarun

@itsarun Thêm các vị trí thập phân trống sẽ không có sự khác biệt nếu bạn chỉ cần thực hiện các phép toán trên chúng. Bạn có thể đang tìm kiếm math.floor, math.ceilhoặcround
Steen Schütt

5

Sử dụng định dạng chuỗi python.

>>> "%0.2f" % 3
'3.00'

4

Định dạng chuỗi:

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

HOẶC LÀ

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

Chức năng vòng có thể được sử dụng:

print(round(a, 2))

Điểm hay của round () là, chúng ta có thể lưu trữ kết quả này sang một biến khác và sau đó sử dụng nó cho các mục đích khác.

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

5
Downvote cho round. Nó không nên được sử dụng chỉ cho mục đích hiển thị .
Wim

@wim Tôi tôn trọng bình luận của bạn, nhưng câu trả lời này chỉ để đáp ứng yêu cầu của ai đó.
debaonline4u

1
@ debaonline4u wim là đúng. round(5.0001, 2)-> 5.0, không'5.00'
wjandrea


3

Nếu bạn thực sự muốn thay đổi số thay vì chỉ hiển thị số khác, hãy sử dụng định dạng ()

Định dạng nó thành 2 chữ số thập phân:

format(value, '.2f')

thí dụ:

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

0

Tôi biết đó là một câu hỏi cũ, nhưng tôi đã loay hoay tự tìm câu trả lời. Đây là những gì tôi đã đưa ra:

Con trăn 3:

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

3
Xin chào, chào mừng bạn đến với Stack Overflow. Khi trả lời một câu hỏi đã có nhiều câu trả lời, vui lòng đảm bảo thêm một số thông tin chi tiết bổ sung về lý do tại sao câu trả lời bạn cung cấp là thực chất và không chỉ đơn giản lặp lại những gì đã được áp dụng bởi poster gốc. Điều này đặc biệt quan trọng trong các câu trả lời "chỉ mã", chẳng hạn như câu trả lời bạn đã cung cấp.
chb


-1

Nếu bạn muốn nhận giá trị dấu phẩy động với hai vị trí thập phân được giới hạn tại thời điểm gọi đầu vào,

Hãy xem cái này ~

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

Tại sao evalmột chuỗi khi bạn có thể chỉ round? Dù sao, điều này thậm chí không hoạt động đúng vì nếu bạn nạp vào 5, bạn nhận được 5.0thay vì 5.00như OP muốn.
wjandrea

Điều này cũng không làm việc cho naninf.
wjandrea
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.