2012-03-04 25 views
5

Tôi có một giá Dollar như một Decimal với một độ chính xác của .01Chuỗi định dạng bằng Python: Đang ở một mức giá mà không cần điểm thập phân

Tôi muốn hiển thị nó trong định dạng chuỗi, giống như có một tin nhắn (với phần trăm.) "You have just bought an item that cost $54.12."

Vấn đề là, nếu giá xảy ra là tròn, tôi muốn chỉ hiển thị nó mà không có xu, như $54.

Tôi có thể thực hiện điều này bằng Python bằng cách nào? Lưu ý rằng tôi đang sử dụng Python 2.7, vì vậy tôi rất vui khi sử dụng định dạng kiểu mới hơn là kiểu chuỗi kiểu cũ.

+0

Nhìn vào câu trả lời này từ [Loại bỏ Trailing Zero bằng Python] (http://stackoverflow.com/a/5808014/63011) –

+0

@PaoloMoretti: Tôi sẽ không muốn một thuật toán. Tôi muốn sử dụng các hàm dựng sẵn của Python. Nếu không thể, tôi sẽ thực hiện thuật toán của riêng mình. –

Trả lời

1

Tôi muốn làm điều gì đó như thế này:

import decimal 

a = decimal.Decimal('54.12') 
b = decimal.Decimal('54.00') 

for n in (a, b): 
    print("You have just bought an item that cost ${0:.{1}f}." 
      .format(n, 0 if n == n.to_integral() else 2)) 

nơi {0:.{1}f} phương tiện in đối số đầu tiên như một phao sử dụng số thập phân trong đối số thứ hai và số thứ hai là 0 khi con số này thực sự bình đẳng đến phiên bản số nguyên và 2 khi không phải là điều tôi tin là những gì bạn đang tìm kiếm.

Đầu ra là:

Bạn vừa mua một món hàng mà chi phí $ 54,12.

Bạn vừa mua một món hàng với giá là $ 54

+4

Tôi không nghĩ đó là điều anh ta muốn. Anh ta muốn '$ 54,12' như đầu ra. Chỉ khi giá trị là '54.00' anh ta muốn các số thập phân bị cắt nhỏ. –

+0

Lợi thế nào thêm mô đun 'thập phân'? Nó có vẻ vô dụng. – Zenon

+2

@Zenon: từ [tài liệu] (http://docs.python.org/library/decimal.html): "Không giống như điểm nổi nhị phân dựa trên phần cứng, mô-đun' thập phân 'có độ chính xác do người dùng thay đổi (mặc định là 28 địa điểm) có thể lớn đến mức cần thiết cho một vấn đề cụ thể. " – bernie

6
>>> import decimal 
>>> n = decimal.Decimal('54.12') 
>>> print('%g' % n) 
'54.12' 
>>> n = decimal.Decimal('54.00') 
>>> print('%g' % n) 
'54' 
+0

Nó hoạt động với 'decimal.getcontext(). Prec = 2' ... – ezod

+0

@DavidHall: Hey, bạn nói đúng. Lấy làm tiếc. Tôi sẽ rút lại bình luận trước đó của tôi. Điều thú vị là, ngôn ngữ định dạng mới không hoạt động theo cách này: '" {0: g} "định dạng (thập phân. Thập phân (" 54.00 "))' trả về '54.00'! –

+0

Bạn nói đúng, sai lầm của tôi. –

-1
>>> dollars = Decimal(repr(54.12)) 
>>> print "You have just bought an item that cost ${}.".format(dollars) 
You have just bought an item that cost $54.12. 
+0

Tôi đã nhận được giá trị dưới dạng 'Thập phân ', tôi không mã hóa nó ... –

0

Đây có phải là những gì bạn muốn?

Lưu ý: x là giá gốc.

round = x + 0.5 
s = str(round) 
dot = s.find('.') 
print(s[ : dot]) 
+0

Đó là một thuật toán. Tôi sẽ không muốn một thuật toán. Tôi muốn sử dụng các hàm dựng sẵn của Python. Nếu không thể, tôi sẽ sử dụng một thuật toán. –

1

trả lời được lấy từ Python Decimals format

>>> a=54.12 
>>> x="${:.4g}".format(a) 
>>> print x 
    $54.12 
>>> a=54.00 
>>> x="${:.4g}".format(a) 
>>> print x 
    $54 
+0

Câu trả lời được lấy từ http://stackoverflow.com/questions/2389846/python-decimals-format – redratear

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