2011-03-03 22 views
23

Sử dụng Python v2, tôi có một giá trị chạy qua chương trình của tôi mà đặt ra một số được làm tròn đến 2 chữ số thập phân ở cuối:Python Thêm Comma Into Số Chuỗi

như thế này:

print ("Total cost is: ${:0.2f}".format(TotalAmount)) 

Có cách nào để chèn một giá trị dấu phẩy mỗi 3 chữ số còn lại của dấu thập phân?

Tức là: 10000.00 trở thành 10.000.00 hoặc 1000000.00 trở thành 1.000.000.00

Cảm ơn bạn đã trợ giúp.

+7

Woo: bốn câu hỏi trong chưa đầy một giờ trên cùng một chủ đề. Bạn đang hoàn thành bài tập về nhà của bạn một chút. Bravo. – joaquin

Trả lời

50

Trong Python 2.7 trở lên, bạn có thể sử dụng

print ("Total cost is: ${:,.2f}".format(TotalAmount)) 

này được ghi chép lại trong PEP 378.

(Từ mã của bạn, tôi không thể nói cho mà Python phiên bản bạn đang sử dụng.)

+0

Xin lỗi, tôi đang sử dụng v2 –

+0

Nhưng mã đó cũng hoạt động trong phiên bản 2. Cảm ơn. –

+0

Đây rõ ràng là bài tập về nhà. Không phải là tôi có bất kỳ vấn đề với nó nhưng: 1). Nó không thực sự dạy cho OP bất cứ điều gì. 2). Điều này biến SO thành một thiên đường để trả lời các câu hỏi về bài tập về nhà. – user225312

4
'{:20,.2f}'.format(TotalAmount) 
14

Bạn có thể sử dụng locale.currency nếu TotalAmount đại diện cho tiền. Nó hoạt động trên Python < 2,7 quá:

>>> locale.setlocale(locale.LC_ALL, '') 
'en_US.utf8' 
>>> locale.currency(123456.789, symbol=False, grouping=True) 
'123,456.79' 

Lưu ý: nó không hoạt động với C locale vì vậy bạn nên thiết lập một số địa phương khác trước khi gọi nó.

2

Đây không phải là đặc biệt thanh lịch nhưng nên làm việc quá:

a = "1000000.00" 
e = list(a.split(".")[0]) 
for i in range(len(e))[::-3][1:]: 
    e.insert(i+1,",") 
result = "".join(e)+"."+a.split(".")[1] 
+1

Giải pháp tốt cho một bài tập. – Wok

5

nếu bạn đang sử dụng Python 3 trở lên, đây là một cách dễ dàng hơn để chèn một dấu phẩy:

Đầu tiên cách

value = -12345672 
print (format (value, ',d')) 

hoặc cách khác

value = -12345672 
print ('{:,}'.format(value)) 
+0

Có khả năng các giá trị sẽ là phao, không phải số nguyên, do đó, nó sẽ là 'định dạng (giá trị,", f ")' – mehtunguh

2

Một chức năng mà làm việc trong python2.7 + hoặc python3.1 +

def comma(num): 
    '''Add comma to every 3rd digit. Takes int or float and 
    returns string.''' 
    if type(num) == int: 
     return '{:,}'.format(num) 
    elif type(num) == float: 
     return '{:,.2f}'.format(num) # Rounds to 2 decimal places 
    else: 
     print("Need int or float as input to function comma()!") 
0

Những câu trả lời trên là đẹp hơn rất nhiều so với mã tôi đã sử dụng trong dự án (không-bài tập về nhà) của tôi:

def commaize(number): 
    text = str(number) 
    parts = text.split(".") 
    ret = "" 
    if len(parts) > 1: 
     ret = "." 
     ret += parts[1] # Apparently commas aren't used to the right of the decimal point 
    # The -1 offsets to len() and 0 are because len() is 1 based but text[] is 0 based 
    for i in range(len(parts[0]) - 1,-1,-1): 
     # We can't just check (i % 3) because we're counting from right to left 
     # and i is counting from left to right. We can overcome this by checking 
     # len() - i, although it needs to be adjusted for the off-by-one with a -1 
     # We also make sure we aren't at the far-right (len() - 1) so we don't end 
     # with a comma 
     if (len(parts[0]) - i - 1) % 3 == 0 and i != len(parts[0]) - 1: 
      ret = "," + ret 
     ret = parts[0][i] + ret 
    return ret 
+0

"Câu trả lời ở trên đẹp hơn rất nhiều so với mã tôi đang sử dụng" - Nếu câu trả lời hiện có tốt hơn, thì không cần phải đăng câu trả lời có chất lượng thấp hơn. Ngoài ra, bài đăng này đã có câu trả lời được chấp nhận. – avojak

+0

Vào thời điểm đó, tôi đã nghĩ rằng nó sẽ hữu ích cho các googlers trong tương lai vì nó không có phiên bản Python tối thiểu mà một số câu trả lời khác đã làm. Sau khi xem xét lại các câu trả lời tôi thấy đã có một. – QBFreak

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