Saya mengetahui beberapa opsi bagus :
Bilangan bulat besar (misalnya, int64_t, mpz_t, setiap bignum lib ) untuk mewakili sen atau 10 n sen-katakanlah, sebuah integer merupakan 1/100 dari satu sen ($ 1,05 == 10500). Ini disebut integer berskala .
Pustaka tingkat tinggi untuk aritmatika desimal presisi sembarang seperti BigDecimal di Jawa, Desimal di Python, decimal.js di Javascript, boost :: multiprecision di C ++
String.
BCD yang dikemas (desimal kode biner) adalah metode yang lebih esoteris yang tampaknya populer di perangkat lunak lama. Baca lebih lanjut tentang itu.
Dalam kode produksi untuk bank (atau kartu kredit, ATM, sistem POS), tipe data apa yang paling sering digunakan? Saya terutama bertanya kepada mereka yang bekerja di bank.
EDIT: Tautan super berguna bagi mereka yang memiliki domain masalah yang sama (perlu menerapkan struktur data "uang" yang tidak rusak).
- http://martinfowler.com/eaaDev/quantity.html
- http://www.codeproject.com/Articles/28244/A-Money-type-for-the-CLR
- http://c2.com/cgi/wiki?MoneyObject
- http://www.setfiremedia.com/blog/7-top-tips-for-coding-with-currency
- http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
EDIT untuk orang yang mengatakan ini adalah pertanyaan duplikat : Ini adalah pertanyaan praktis bukan teoritis tentang "apa yang terbaik". Baca judul pertanyaan saya yang belum diedit. Saya bertanya apa yang dilihat orang secara langsung dalam basis kode bank.
Saya tahu BigDecimal jelas "terbaik", tetapi API yang bagus seperti itu tidak tersedia di mana-mana, percaya atau tidak, dan pustaka desimal lebih mahal daripada ints.
sumber
Jawaban:
Sebagian besar bank masih menggunakan mainframe. Tipe data pada mainframe sangat canggung dengan standar saat ini. Mereka mungkin hanya digit yang dikodekan sebagai karakter. Jadi 1234.56 benar-benar akan menjadi string yang berisi angka-angka itu. Dan satu karakter bisa 4, 6 atau 9 bit. Atau, dalam situasi "optimal", mungkin ada dua digit yang dikemas dalam satu karakter. Lagi pula, Anda hanya perlu 4 bit (nibble) untuk karakter desimal.
Anda akan bertanya-tanya bagaimana mereka datang dengan solusi ini. Mereka sering berbasis pada arsitektur perangkat keras. Kami terbiasa dengan kelipatan arsitektur 8-bit. Di masa lalu ini tidak diberikan.
Unisys menggunakan kata-kata 36-bit dan kata-kata dapat dipecah menjadi bagian 6-bit, 9-bit, 12-bit atau 18-bit sebelum digunakan untuk menyimpan data.
Bersyukurlah kita tidak harus berurusan dengan hal-hal ini lagi. Kerangka NET. Memiliki jenis yang bagus disebut desimal yang baik untuk mata uang.
sumber