Tôi nên làm việc với Money bằng MongoID bằng cách nào? Tôi có nên cấu hình nó như BigDecimal không? Và ở cấp độ đường ray? Đối với ActiveRecord, chúng tôi có thứ gọi là Money, nhưng AFAIK chỉ hỗ trợ ARđại diện tiền trong mongoid
Trả lời
Số cửa hàng MongoDB ở các loại dữ liệu khác nhau (int, long int, double). Tôi khuyên bạn nên lưu trữ tiền là xu (nếu tiền tệ của Hoa Kỳ) và sử dụng kiểu dữ liệu int dài.
Tôi cũng gặp phải điều này. Thật không may các cửa hàng BigDecimal trong Mongodb như là một chuỗi, do đó, nó sẽ không cho phép bạn tổng hợp, sắp xếp, vv trên nó như một phao hoặc int.
Integer dường như là con đường để đi lưu trữ các giá trị theo đơn vị cent, có thể sử dụng đá quý Tiền để trừu tượng nó một chút: https://github.com/RubyMoney/money
Mongo lưu int sử dụng 64 bit trên hầu hết các máy móc hiện đại, tôi nghĩ vậy có không có nhiều nguy cơ cần một số tiền lớn hơn ngay cả trong xu. Có vẻ như bạn có thể lưu trữ trong khoảng từ −9,223,372,036,854,775,808 và 9,223,372,036,854,775,807 cent, vì vậy hãy cất hai chữ số thập phân để nhận giá trị tối thiểu/tối đa bằng đô la.
Tôi khuyên bạn nên thử đường ray thay thế. https://github.com/RubyMoney/money-rails Nó được duy trì khá tốt và hoạt động với mongoid quá!
Nếu bạn thích đá quý, bạn có thể lưu nó dưới dạng loại tiền.
Một ví dụ: https://gist.github.com/michaelkoper/5007636
Nó lưu trữ tiền như một mảng [cent, tệ]
class Product
include Mongoid::Document
field :price, type: Money
end
product = Product.new(:price => Money.new(1000, 'EUR'))
product.price.format
# => "€10.00"
- 1. Lớp nào dùng để đại diện tiền?
- 2. Ký tự đại diện tiền tố Postgresql cho toàn văn
- 3. Làm thế nào để đại diện cho tiền trong Objective-C/iOS?
- 4. Loại dữ liệu cho loại tiền tệ sử dụng Mongoid
- 5. MySQL chọn sử dụng ký tự đại diện (nhưng ký tự đại diện trong lĩnh vực)
- 6. Đại diện cho một cây trong Clojure
- 7. Đại diện của float trong C
- 8. ký tự đại diện trong Java PreparedStatements
- 9. Tiền tố và ký tự đại diện hậu tố trong tìm kiếm văn bản đầy đủ mysql
- 10. Siêu đại diện có thể đại diện cho máy Turing không xác định không?
- 11. mongoid .limit không hoạt động trong mongoid 3.1.x
- 12. Ký tự đại diện bằng Python?
- 13. $$, $ ?, $^đại diện cho quyền hạn nào?
- 14. C# hằng số nhị phân đại diện
- 15. Ký tự đại diện XPath trên tên nút
- 16. Trên đại diện của hoán vị
- 17. Đại diện định sử dụng Regular Expression
- 18. thay thế ký tự đại diện sed
- 19. Java Generics (ký tự đại diện)
- 20. In thoát đại diện của một str
- 21. Tìm khóa bằng ký tự đại diện
- 22. Rails.root filepath kí tự đại diện
- 23. C# Đại diện bất động sản?
- 24. Thư viện đại diện thời gian GPS
- 25. Ký tự đại diện thường xuyên
- 26. Sự kiện, đại biểu hoặc giao diện?
- 27. cout - những gì nó đại diện cho?
- 28. Tìm kiếm ký tự đại diện Solr
- 29. 0x80020101 đại diện cho những gì?
- 30. đại diện() với nhau bằng một vector
tiền là bao nhiêu? – shingara
như số thập phân, int, phao ... – luckytaxi
dm là đúng. Không bao giờ sử dụng số dấu phẩy động để đại diện cho tiền (như nổi, tăng gấp đôi). Điều này sẽ làm cho rất nhiều butthurt. Bạn sẽ mất xu khi biểu diễn. Ví dụ 10.2 có thể được biểu diễn như 10.19999 (9). Trong làm tròn và các phép tính số học khác nhau, bạn sẽ nhận được lỗi ngày càng tăng. [Tại sao không sử dụng gấp đôi để đại diện cho tiền tệ] (http://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency/3730040#3730040) – Dao