Câu trả lời:
Xem mô đun miền địa phương .
Điều này không định dạng tiền tệ (và ngày).
>>> import locale
>>> locale.setlocale( locale.LC_ALL, '' )
'English_United States.1252'
>>> locale.currency( 188518982.18 )
'$188518982.18'
>>> locale.currency( 188518982.18, grouping=True )
'$188,518,982.18'
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
và nó hoạt động hoàn hảo!
>>> '{:20,.2f}'.format(18446744073709551616.0)
'18,446,744,073,709,551,616.00'
$ 123,456.78
đôi khi sẽ dẫn đến . Chỉnh sửa: markdown lấy ra khoảng trắng thừa, giả vờ có nhiều hơn giữa $ và các số
Không hoàn toàn chắc chắn tại sao nó không được đề cập trực tuyến nhiều hơn (hoặc trên chuỗi này), nhưng gói Babel (và các tiện ích Django) từ những người Edgewall là tuyệt vời cho định dạng tiền tệ (và rất nhiều nhiệm vụ i18n khác). Thật tuyệt vì nó không phải chịu sự cần thiết phải làm mọi thứ trên toàn cầu như mô đun miền địa phương Python cốt lõi.
Ví dụ mà OP đưa ra sẽ đơn giản là:
>>> import babel.numbers
>>> import decimal
>>> babel.numbers.format_currency( decimal.Decimal( "188518982.18" ), "GBP" )
£188,518,982.18
locale
đối số format_currency
có thể được sử dụng để giải quyết vấn đề này, nhưng đó không phải là tài liệu bốn năm trước (khi tôi viết nhận xét đó) hoặc tôi chỉ kiểm tra mã của câu trả lời này mà không cần kiểm tra tài liệu.
Đây là một bài viết cổ, nhưng tôi chỉ thực hiện các giải pháp sau đây:
Mã số:
num1 = 4153.53
num2 = -23159.398598
print 'This: ${:0,.0f} and this: ${:0,.2f}'.format(num1, num2).replace('$-','-$')
Đầu ra:
This: $4,154 and this: -$23,159.40
Và đối với những poster ban đầu, rõ ràng, chỉ cần chuyển $
cho£
print(f'Value is: ${value:,.2f}'.replace('$-', '-$'))
Cài đặt ngôn ngữ của tôi dường như không đầy đủ, vì vậy tôi đã nhìn quá câu trả lời SO này và tìm thấy:
http://docs.python.org/l Library / decimal.html # recipes
Hệ điều hành độc lập
Chỉ muốn chia sẻ ở đây.
def moneyfmt(value, places=2, curr='', sep=',', dp='.', pos='', neg='-', trailneg='')
đâu?
Nếu bạn đang sử dụng OSX và chưa đặt mô-đun địa phương, câu trả lời đầu tiên này sẽ không hoạt động, bạn sẽ nhận được lỗi sau:
Traceback (most recent call last):File "<stdin>", line 1, in <module> File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 221, in currency
raise ValueError("Currency formatting is not possible using "ValueError: Currency formatting is not possible using the 'C' locale.
Để khắc phục điều này, bạn sẽ phải sử dụng như sau:
locale.setlocale(locale.LC_ALL, 'en_US')
"{:0,.2f}".format(float(your_numeric_value))
trong Python 3 thực hiện công việc; nó đưa ra một cái gì đó giống như một trong những dòng sau:
10,938.29
10,899.00
10,898.99
2,328.99
Nếu tôi là bạn, tôi sẽ sử dụng BABEL: http://babel.pocoo.org/en/latest/index.html
from babel.numbers import format_decimal
format_decimal(188518982.18, locale='en_US')
format_currency
:).
Ồ, đó là một con thú thú vị.
Tôi đã dành thời gian đáng kể để có được quyền đó, có ba vấn đề chính khác nhau từ địa phương đến địa phương: - biểu tượng và hướng tiền tệ - dấu phân cách nghìn - dấu thập phân
Tôi đã viết bản triển khai khá rộng rãi của riêng tôi về phần này là một phần của khung trăn kiwi, hãy xem nguồn LGPL: ed tại đây:
http://svn.async.com.br/cgi-bin/viewvc.cgi/kiwi/trunk/kiwi/currency Shikview=markup
Mã này hơi dành riêng cho Linux / Glibc, nhưng không quá khó để áp dụng cho các cửa sổ hoặc các bản phối khác.
Khi bạn đã cài đặt xong, bạn có thể làm như sau:
>>> from kiwi.datatypes import currency
>>> v = currency('10.5').format()
Mà sau đó sẽ cung cấp cho bạn:
'$10.50'
hoặc là
'10,50 kr'
Tùy thuộc vào miền địa phương hiện được chọn.
Điểm chính của bài đăng này là trên bài khác là nó sẽ hoạt động với các phiên bản cũ hơn của python. locale.currency đã được giới thiệu trong python 2.5.
10,50 kr
thay vì kr 10,50
.
#printing biến 'Total:' ở định dạng giống như '9,348.237'
print ('Total:', '{:7,.3f}'.format(zum1))
trong đó '{: 7, .3f}' es số lượng khoảng trắng để định dạng số trong trường hợp này là một triệu với 3 điểm thập phân. Sau đó, bạn thêm '.format (zum1). Biến zum1 là biến có số lớn cho tổng của tất cả số trong chương trình cụ thể của tôi. Biến có thể là bất cứ điều gì mà bạn quyết định sử dụng.
Lấy cảm hứng từ đoạn mã trên: D
def money_format(value):
value = str(value).split('.')
money = ''
count = 1
for digit in value[0][::-1]:
if count != 3:
money += digit
count += 1
else:
money += f'{digit},'
count = 1
if len(value) == 1:
money = ('$' + money[::-1]).replace('$-','-$')
else:
money = ('$' + money[::-1] + '.' + value[1]).replace('$-','-$')
return money
Tôi đã đến để xem xét điều tương tự và thấy tiền python chưa thực sự sử dụng nó nhưng có lẽ sự kết hợp của cả hai sẽ tốt
Một lambda để tính toán nó bên trong một hàm, với sự giúp đỡ từ câu trả lời của @ Nate
converter = lambda amount, currency: "%s%s%s" %(
"-" if amount < 0 else "",
currency,
('{:%d,.2f}'%(len(str(amount))+3)).format(abs(amount)).lstrip())
và sau đó,
>>> converter(123132132.13, "$")
'$123,132,132.13'
>>> converter(-123132132.13, "$")
'-$123,132,132.13'
Mã trăn đơn giản!
def format_us_currency(value):
value=str(value)
if value.count(',')==0:
b,n,v='',1,value
value=value[:value.rfind('.')]
for i in value[::-1]:
b=','+i+b if n==3 else i+b
n=1 if n==3 else n+1
b=b[1:] if b[0]==',' else b
value=b+v[v.rfind('.'):]
return '$'+(value.rstrip('0').rstrip('.') if '.' in value else value)
"$2,129.1468284147656"
, "$10,948.3742933"
, "$1,0908"
. Rắc chuỗi.
locale
sử dụng giá trị tiền tệ của mô-đun và thuộc tính hiển thị của loại tiền đó.