2008-08-22 49 views
87

Tôi cần tìm hiểu cách định dạng số dưới dạng chuỗi. Mã của tôi ở đây:Định dạng số thành chuỗi trong Python

return str(hours)+":"+str(minutes)+":"+str(seconds)+" "+ampm 

Giờ và phút là số nguyên và giây là phao. Hàm str() sẽ chuyển tất cả các số này thành vị trí thứ mười (0,1). Vì vậy, thay vì chuỗi xuất của tôi "5: 30: 59.07 pm", nó sẽ hiển thị một cái gì đó như "5.0: 30.0: 59.1 pm".

Tóm lại, tôi cần phải làm gì cho thư viện/chức năng này?

Trả lời

120

Định dạng bằng Python được thực hiện thông qua string formatting (%) operator:

"%02d:%02d:%02d" % (hours, minutes, seconds) 

/Edit: Ngoài ra còn có strftime.

+0

Mã trong câu hỏi sử dụng "str()", mã trong câu trả lời của Konrad không thành công. Vì vậy, đây là một ví dụ đơn giản: 'myFloat = 4.55' ' myString = '% d'% (myFloat) ' ' print myString' –

+0

Đối với các trường hợp khác sử dụng phao (nếu bạn muốn hiển thị số thập phân), bạn nên sử dụng '% f 'thay vì'% d' – jocull

+7

@jocull Đúng, nhưng phương thức này không được dùng để ủng hộ 'str.format', và có các chuỗi định dạng hoạt động hoàn toàn khác nhau. –

1

str() trong python trên một số nguyên sẽ không in bất kỳ chữ số thập phân.

Nếu bạn có một phao mà bạn muốn bỏ qua phần thập phân, thì bạn có thể sử dụng str (int (floatValue)).

Có lẽ đoạn mã sau sẽ chứng minh:

>>> str(5) 
'5' 
>>> int(8.7) 
8 
88

Bắt đầu bằng Python 2.6, có một sự thay thế: phương pháp str.format(). Dưới đây là một số ví dụ sử dụng các nhà điều hành hiện có định dạng chuỗi (%):

>>> "Name: %s, age: %d" % ('John', 35) 
'Name: John, age: 35' 
>>> i = 45 
>>> 'dec: %d/oct: %#o/hex: %#X' % (i, i, i) 
'dec: 45/oct: 055/hex: 0X2D' 
>>> "MM/DD/YY = %02d/%02d/%02d" % (12, 7, 41) 
'MM/DD/YY = 12/07/41' 
>>> 'Total with tax: $%.2f' % (13.00 * 1.0825) 
'Total with tax: $14.07' 
>>> d = {'web': 'user', 'page': 42} 
>>> 'http://xxx.yyy.zzz/%(web)s/%(page)d.html' % d 
'http://xxx.yyy.zzz/user/42.html' 

Dưới đây là các đoạn tương đương nhưng sử dụng str.format():

>>> "Name: {0}, age: {1}".format('John', 35) 
'Name: John, age: 35' 
>>> i = 45 
>>> 'dec: {0}/oct: {0:#o}/hex: {0:#X}'.format(i) 
'dec: 45/oct: 0o55/hex: 0X2D' 
>>> "MM/DD/YY = {0:02d}/{1:02d}/{2:02d}".format(12, 7, 41) 
'MM/DD/YY = 12/07/41' 
>>> 'Total with tax: ${0:.2f}'.format(13.00 * 1.0825) 
'Total with tax: $14.07' 
>>> d = {'web': 'user', 'page': 42} 
>>> 'http://xxx.yyy.zzz/{web}/{page}.html'.format(**d) 
'http://xxx.yyy.zzz/user/42.html' 

Giống như Python 2.6+, tất cả Python 3 phiên bản (cho đến nay) hiểu cách làm cả hai. Tôi không biết xấu hổ đã tách công cụ này ra khỏi my hardcore Python intro book và các trang trình bày cho Intro + Intermediate Python courses I offer theo thời gian. :-)

+1

Không bao giờ biết về str.format(). Cảm ơn! – legends2k

+5

Theo tôi, 'str.format()' là câu trả lời đúng ở đây, đặc biệt là ''{: .2f}' định dạng (3.145159)'. Câu trả lời hay! – rickcnagy

+1

https://pyformat.info/ – endolith

1

Nếu bạn có giá trị bao gồm số thập phân, nhưng giá trị thập phân không đáng kể (ví dụ: 100.0) và cố gắng int, bạn sẽ gặp lỗi. Nó có vẻ ngớ ngẩn, nhưng gọi phao đầu tiên sửa lỗi này.

str (int (float ([biến])))

+0

"câu trả lời" của bạn liên quan đến câu hỏi như thế nào? – SilentGhost

+1

@SilentGhost là chính xác: thay vì một "câu trả lời" khác, phản hồi này lẽ ra đã được đăng là nhận xét cho OP. – wescpy

2

Bạn có thể sử dụng sau đây để đạt được chức năng mong muốn

"%d:%d:d" % (hours, minutes, seconds) 
4

Trong Python 2.6+, nó có thể sử dụng chức năng format(), vì vậy trong trường hợp của bạn, bạn có thể sử dụng:

return '{:02d}:{:02d}:{:.2f} {}'.format(hours, minutes, seconds, ampm) 

Có nhiều cách để sử dụng chức năng này, để biết thêm thông tin bạn có thể kiểm tra documentation.

Các vấn đề liên quan