2011-12-26 41 views
5

Tôi có một số nguyên biểu thị giá bằng xu. Sử dụng chuỗi định dạng Python, làm cách nào tôi có thể chuyển đổi giá trị này thành đô la với hai chữ số thập phân? Ví dụ:Làm thế nào để sử dụng định dạng chuỗi Python để chuyển đổi một số nguyên đại diện cho xu cho một phao đại diện cho đô la?

1234 => 12.34 
5 => 0.05 
999 => 9.99 

EDIT: Tôi nên cung cấp một số thông tin cơ bản. Tôi đang lưu trữ giá trong cơ sở dữ liệu dưới dạng số nguyên để đảm bảo rằng tôi không bị mất chính xác. Tôi không muốn sử dụng kiểu dữ liệu thập phân vì các giá trị này cũng sẽ được sử dụng trong các phép tính trong Javascript, vì vậy các số nguyên sẽ đơn giản nhất để làm việc với điều đó. Tôi muốn có thể hiển thị trong một mẫu Django giá trị được định dạng bằng cách sử dụng thẻ stringformat. Như vậy, chia số cho 100 không hoạt động. Có cách nào để thêm dấu thập phân mà không chia?

+1

Không sử dụng phao cho tiền tệ. Nó hoàn toàn sai. Thập phân hoạt động hoàn hảo cho nhu cầu của bạn. Nó có thể được chuyển đổi thành một chuỗi (cho Javascript) và tất cả các tính toán tài chính hoạt động chính xác với số thập phân. –

Trả lời

12

Bạn nên cố gắng để tránh bao giờ sử dụng phao để đại diện cho tiền (số không chính xác có thể quá dễ dàng leo vào). Mô-đun thập phân cung cấp một kiểu dữ liệu hữu ích để biểu diễn tiền vì nó có thể biểu diễn chính xác các số thập phân như 0,05.

Nó có thể được sử dụng như thế này:

import decimal 
cents = 999 
dollars = decimal.Decimal(cents)/100 
print dollars 
5

Sử dụng str.format:

for i in (1234,5,999): 
    print('{:.2f}'.format(i/100.)) 

mang

12.34 
0.05 
9.99 

Trong python2.6 sử dụng '{0:.2f}' thay vì '{:.2f}'.

6

Nếu bạn không quan tâm đến nội địa hóa, sau đó chỉ cần chia cho 100 và định dạng nó:

>>> for cents in [ 1234, 5, 999 ]: 
...  '{0:.02f}'.format(float(cents)/100.0) 
... 
'12.34' 
'0.05' 
'9.99' 

Nếu bạn quan tâm đến nội địa hóa, sau đó sử dụng mô-đun locale:

>>> import locale 
>>> locale.setlocale(locale.LC_ALL, "") # use the user-default locale 
'en_US.UTF-8' 
>>> for cents in [ 1234, 5, 999 ]: 
...  locale.currency(float(cents)/100.0) 
... 
'$12.34' 
'$0.05' 
'$9.99' 
+0

+1 để bao gồm ví dụ l10n. Làm tốt. – AgentK

+0

Tôi không chắc chắn rằng làm việc với 'float 'và tiền tệ là một ý tưởng tốt. –

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