2012-02-08 51 views
7

Tôi đang cố lưu trữ các giá trị tiền tệ trong cơ sở dữ liệu sqlite trong android. Tôi không nghĩ rằng để int sẽ được sử dụng ở đây. Tôi đã nghe nói rằng Bigdecimal có thể được sử dụng. Nếu bất cứ ai có thể cho tôi biết cách nó nên được sử dụng để gửi các giá trị cho cơ sở dữ liệu sqlite.Lưu trữ tiền tệ trong cơ sở dữ liệu Android SQlite

Trả lời

11

Lưu BigDecimal làm chuỗi.

Bạn có thể sử dụng phương thức toPlainString().

BigDecimal b = new BigDecimal(); 
String s = b.toPlainString(); 

Sau đó, khi bạn kéo từ cơ sở dữ liệu, bạn có thể tạo BigDecimal mới.

BigDecimal c = new BigDecimal(String s) 

Tin hay không SQLite 3.0 lưu trữ tất cả các loại dữ liệu dưới dạng chuỗi ngay cả khi bạn nói nó là số nguyên. Hãy xem this web page from the official SQLite website và cuộn xuống phần "Kiểu đánh máy và hỗ trợ BLOB". Nó nói về cách nó sẽ cho phép bạn lưu trữ các chuỗi trong các cột khác.

+0

Tôi không tin bạn: SQLite 3.0 lưu trữ số nguyên làm số nguyên. Đó là phiên bản 2.8 cũ đã lưu trữ mọi thứ dưới dạng chuỗi. – Jeff

+0

Đó là sai. Đi đến trang web (Tôi vừa sửa liên kết) và tìm kiếm: Sự khác biệt là SQLite 3.0 sẽ vẫn lưu trữ dữ liệu ngay cả khi không thể chuyển đổi định dạng. – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

Bạn cũng nên bao gồm câu trước đó từ trang đó: "Khi dữ liệu được chèn vào cột, cột đó sẽ thực hiện một nỗ lực để chuyển đổi định dạng dữ liệu thành loại được khai báo của cột". Khi bạn khai báo một cột là Integer và lưu chuỗi '12345' vào nó, SQLite sẽ chuyển đổi chuỗi đó thành số nguyên và lưu nó thành số nguyên. – Jeff

0

Chỉ cần sử dụng Int tại đây. Vì SQlite sử dụng 8 byte cho int, giá trị tối đa là 2^64, là 1.8446744e + 19 - 1, nhiều hơn hoặc ít hơn 10^18, đủ lớn cho tiền tệ.

Đồng thời chúng tôi

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