2013-03-06 34 views
8

Tôi đang viết một lớp để đại diện cho tiền và một vấn đề mà tôi đã gặp phải là "1.50" != str(1.50). str (1.50) bằng 1,5, và bất ngờ, POOF. 45 xu đã biến mất và số tiền bây giờ là 1 đô la và 5 xu. không một đô la và 50 xu. Bất kỳ cách nào tôi có thể ngăn chặn str từ làm điều này, hoặc tôi làm điều gì đó sai? Đây là Python 2 BTW.Giữ số 0 theo sau trong python

+1

này minh họa một điểm quan trọng: một đô la và năm mươi xu là ** không ** tương đương với trọng lượng 1,5 pound. 1,5 pound và 1,50 pound là chính xác điều tương tự, và bạn hiếm khi quan tâm đến sự khác biệt giữa 1,5 pound và 1,50001 pounds. Điều này là do "pound" đo một số lượng * liên tục * (trọng lượng), trong khi "xu" đo một số lượng * rời rạc *. –

+0

Cảnh báo thiết kế hạng kém lần nữa ... –

Trả lời

19

Bạn có thể sử dụng phương pháp format trên dây để xác định có bao nhiêu chữ số thập phân mà bạn muốn thể hiện:

>>> "{:.2f}".format(1.5) 
'1.50' 

Nhưng thậm chí tốt hơn sẽ được sử dụng decimal module cho đại diện cho tiền, vì đại diện vấn đề với phao nhị phân có thể cho bạn một chút kết quả nếu bạn đang làm số học. Các tài liệu cho module đó đề cập đến một số những vấn đề đặc biệt - một trong những thú vị nhất cho các ứng dụng tiền là:

>>> 0.1+0.1+0.1-0.3 
5.551115123125783e-17 
>>> from decimal import Decimal 
>>> Decimal('.1') + Decimal('.1') + Decimal('.1') - Decimal('.3') 
Decimal('0.0') 
+0

Hoặc chỉ '"% .2f "% 1.5' – grc

1
x = 1.500000 

print '%.2f' % x 
print '{:.3f}'.format(x) 

kết quả

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