2009-10-07 77 views
10

Tôi có một phao: 1.2333333Làm cách nào để thay đổi số float của tôi thành hai số thập phân bằng dấu phẩy làm dấu tách dấu thập phân trong python?

Làm cách nào để thay đổi thành hai số thập phân bằng dấu phẩy làm dấu phân cách dấu thập phân, ví dụ: 1,23?

+0

dupe: http://stackoverflow.com/questions/316238/python-float-to-decimal-conversion –

+0

@ Ólafur Waage - những thứ locale không có trong http://stackoverflow.com/questions/ 316238/python-float-to-decimal-conversion –

Trả lời

8

Để có được hai số thập phân, sử dụng

'%.2f' % 1.2333333 

Để có được một dấu phẩy, sử dụng replace():

('%.2f' % 1.2333333).replace('.', ',') 

Một lựa chọn thứ hai sẽ được change the locale đến một số nơi trong đó sử dụng một dấu phẩy và sau đó sử dụng locale.format() :

locale.setlocale(locale.LC_ALL, 'FR') 
locale.format('%.2f', 1.2333333) 
+0

Điều này hoàn toàn sai. trình định dạng chuỗi '"% f "' bình thường không phụ thuộc vào miền địa phương. – u0b34a0f6ae

+0

Đôi khi, đó là: https://bugs.webkit.org/show_bug.cgi?id=18994 Tôi đã cải thiện câu trả lời của mình để tránh sự mơ hồ. –

+0

@ FlorianPilz: Không có phiên bản Python của tôi và không phải [theo tài liệu] (https://docs.python.org/2/library/stdtypes.html#str.replace) –

1

Nếu bạn không muốn gây rối với l ocale, bạn có thể tự mình định dạng. Đây có thể là điểm xuất phát:

def formatFloat(value, decimals = 2, sep = ","): 
    return "%s%s%0*u" % (int(value), sep, decimals, (10 ** decimals) * (value - int(value))) 

Lưu ý rằng điều này sẽ luôn cắt bớt phần phân đoạn (tức là 1,04999 sẽ in là 1,04).

7

locale module có thể giúp bạn đọc và viết số theo định dạng của ngôn ngữ.

>>> import locale 
>>> locale.setlocale(locale.LC_ALL, "") 
'sv_SE.UTF-8' 
>>> locale.format("%f", 2.2) 
'2,200000' 
>>> locale.format("%g", 2.2) 
'2,2' 
>>> locale.atof("3,1415926") 
3.1415926000000001 
Các vấn đề liên quan