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
Trả lời
Khi làm việc với tiền, luôn đại diện cho tiền bằng cách sử dụng lớp Thập phân.
Đánh bại tôi với nó :) – Patashu
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')
Hoặc chỉ '"% .2f "% 1.5' – grc
x = 1.500000
print '%.2f' % x
print '{:.3f}'.format(x)
kết quả
1.50
1.500
- 1. Chuyển đổi thành nhị phân và giữ số 0 đứng đầu trong Python
- 2. Sắp xếp theo thứ tự tăng dần, nhưng giữ số 0 ở cuối
- 3. Rác trong hồ sơ sau khi truncate (0) bằng Python
- 4. Làm cách nào để làm cho trường số HTML5 hiển thị số 0 theo sau?
- 5. Thêm số 0 vào dấu phẩy sau dấu thập phân trong Python
- 6. Trong Python, làm cách nào để đếm số không theo sau trong một chuỗi hoặc số nguyên?
- 7. Làm thế nào để phpexcel giữ số 0 đứng đầu trong số điện thoại?
- 8. C# - số gia số và giữ số 0 ở phía trước
- 9. python thử trừ 0
- 10. C++ chia theo 0
- 11. Tìm các đảo số 0 theo thứ tự
- 12. Xóa các số không theo sau từ BigDecimal trong Java
- 13. Cách cắt số 0 sau dấu thập phân
- 14. Chữ số 0-số trong chuỗi
- 15. Python Giữ điểm trong spline suy
- 16. Python: Truyền tham số theo tên
- 17. CSV cho Excel, Bao gồm cả số 0 và số 0 hàng đầu
- 18. In số 0 đứng đầu trong C?
- 19. Điều gì tiếp theo sau khi đọc Dive vào Python?
- 20. Số nguyên với số 0 hàng đầu
- 21. Truyền số nguyên theo tham chiếu trong Python
- 22. Hoán đổi 1 với 0 và 0 với 1 theo cách Pythonic
- 23. WebAudio không phát sau khi dừng (0)
- 24. python pandas/numpy True/False để 1/0 ánh xạ
- 25. Cách giữ fsi.exe mở sau khi chạy
- 26. Có phải là số không (-0) tương đương với số không (0) trong C#
- 27. Đếm số 0 đứng đầu trong Int32
- 28. Định dạng số phức trong Python
- 29. Đối số tùy chọn theo sau là Params
- 30. chọn true nếu sau đó 0 trong t-sql
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 *. –
Cảnh báo thiết kế hạng kém lần nữa ... –