Các chữ số cố định sau số thập phân với chuỗi f


320

Có cách nào dễ dàng với chuỗi f của Python để sửa số chữ số sau dấu thập phân không? (Cụ thể là chuỗi f, không phải các tùy chọn định dạng chuỗi khác như .format hoặc%)

Ví dụ: giả sử tôi muốn hiển thị 2 chữ số sau vị trí thập phân.

Làm thế nào để làm điều đó? Hãy nói rằng

a = 10.1234

Câu trả lời:


476

Bao gồm các chỉ định loại trong biểu thức định dạng của bạn:

>>> a = 10.1234
>>> f'{a:.2f}'
'10.12'

33
Không có ví dụ định dạng chuỗi f nào tôi tìm thấy, kể cả PEP, cho thấy bạn có thể sử dụng công cụ xác định kiểu. Tôi đoán tôi nên đã giả định điều đó, nhưng các tài liệu gọi nó là tốt đẹp.
GafferMan2112

Bạn đã đúng, hầu hết các ví dụ không có định dạng định dạng. Trong PEP, ví dụ hex thực hiện: f'input={value:#06x}'và các ví dụ về thời gian thực hiện: {anniversary:%A, %B %d, %Y}{date:%A}. Tôi nghĩ rằng lời giải thích chính là trong phần Tương đương mã .
Cướp

9
Người đàn ông, điều này là tuyệt đẹp và đơn giản. Tại sao tôi phải mất hơn 45 giây để tìm câu trả lời này? Lên trò chơi, Google.
Matt Fletcher

2
cũng lưu ý rằng nếu không có f nếu bạn viết - f '{a: .2}' thì nó sẽ đếm tổng số chữ số và câu trả lời sẽ là 10
Drako

87

Khi nói đến floatsố, bạn có thể sử dụng định dạng định dạng :

f'{value:{width}.{precision}}'

Ở đâu:

  • value là bất kỳ biểu thức nào ước lượng cho một số
  • widthchỉ định số lượng ký tự được sử dụng trong tổng số để hiển thị, nhưng nếu valuecần nhiều không gian hơn chiều rộng chỉ định thì không gian bổ sung được sử dụng.
  • precision cho biết số lượng ký tự được sử dụng sau dấu thập phân

Những gì bạn đang thiếu là chỉ định loại cho giá trị thập phân của bạn. Trong liên kết này , bạn tìm thấy các loại bản trình bày có sẵn cho dấu phẩy động và thập phân.

Ở đây bạn có một số ví dụ, sử dụng floại trình bày (Điểm cố định):

# notice that it adds spaces to reach the number of characters specified by width
In [1]: f'{1 + 3 * 1.5:10.3f}'
Out[1]: '     5.500'

# notice that it uses more characters than the ones specified in width
In [2]: f'{3000 + 3 ** (1 / 2):2.1f}' 
Out[2]: '3001.7'

In [3]: f'{1.2345 + 4 ** (1 / 2):9.6f}'
Out[3]: ' 3.234500'

# omitting width but providing precision will use the required characters to display the number with the the specified decimal places
In [4]: f'{1.2345 + 3 * 2:.3f}' 
Out[4]: '7.234'

# not specifying the format will display the number with as many digits as Python calculates
In [5]: f'{1.2345 + 3 * 0.5}'
Out[5]: '2.7344999999999997'

34

Thêm vào câu trả lời của Robᵩ: trong trường hợp bạn muốn in số lượng khá lớn, sử dụng hàng nghìn dấu phân cách có thể là một trợ giúp tuyệt vời (lưu ý dấu phẩy).

>>> f'{a*1000:,.2f}'
'10,123.40'

15

Sử dụng định dạng định dạng với chuỗi f ( thêm ở đây ).

  • Bạn có thể kiểm soát số thập phân :
pi = 3.141592653589793238462643383279

print(f'The first 6 decimals of pi are {pi:.6f}.')
The first 6 decimals of pi are 3.141593.
  • Bạn có thể chuyển đổi thành tỷ lệ phần trăm :
grade = 29/45

print(f'My grade rounded to 3 decimals is {grade:.3%}.')
My grade rounded to 3 decimals is 64.444%.
  • Bạn có thể làm những việc khác như in chiều dài không đổi :
from random import randint
for i in range(5):
    print(f'My money is {randint(0, 150):>3}$')
My money is 126$
My money is   7$
My money is 136$
My money is  15$
My money is  88$
  • Hoặc thậm chí in bằng dấu phân cách dấu phẩy nghìn :
print(f'I am worth {10000000000:,}$')
I am worth 10,000,000,000$

1
a = 10.1234

print(f"{a:0.2f}")

trong 0,2f:

  • 0 đang nói với python không đặt giới hạn cho tổng số chữ số sẽ hiển thị
  • .2 đang nói rằng chúng tôi chỉ muốn lấy 2 chữ số sau số thập phân (kết quả sẽ giống như hàm round ())
  • f đang nói rằng đó là một số float. Nếu bạn quên f thì nó sẽ chỉ in 1 chữ số sau số thập phân. Trong trường hợp này, nó sẽ chỉ còn 1 chữ số sau số thập phân.

Một video chi tiết về chuỗi f cho số https://youtu.be/RtKUsUTY6to?t=606


-2

Để làm tròn ...

import datetime as dt
now = dt.datetime(2000, 1, 30, 15, 10, 15, 900)
now_mil = round(now.microsecond/1000)
print(f"{now:%Y/%m/%d %H:%M:%S.}{now_mil:03}")

Đầu ra: 2000/01/30 15: 10: 15.001


điều này không liên quan gì đến câu hỏi và tài khoản này đã không hoạt động kể từ bài đăng này
Nicolas Gervais
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.