Я знаю несколько хороших вариантов :
Большие целые числа (например, int64_t, mpz_t, любая библиотека bignum ) для представления центов или 10 -n центов - скажем, целое число представляет 1/100 копейки ($ 1,05 == 10500). Это называется масштабированным целым числом .
Библиотека высокого уровня для десятичной арифметики произвольной точности, такой как BigDecimal в Java, Decimal в Python, decimal.js в Javascript, boost :: multiprecision в C ++
Строки.
Упакованные BCD (двоично-десятичные дроби) - более эзотерический метод, который казался популярным в старом программном обеспечении. Узнайте больше об этом.
В производственном коде для банков (или кредитных карт, банкоматов, POS-систем), какой тип данных используется чаще всего? Я особенно спрашиваю тех, кто работал на банки.
РЕДАКТИРОВАТЬ: Супер полезные ссылки для тех, кто с той же проблемной области (необходимо реализовать структуру данных "деньги", которая не нарушается).
- 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
РЕДАКТИРОВАТЬ для парня, который сказал, что это дублирующий вопрос : это практический, а не теоретический вопрос «что лучше». Прочитайте неотредактированное название моего вопроса. Я спрашиваю, что люди видели из первых рук в кодах банков.
Я знаю, что BigDecimal «лучший», очевидно, но подобные API-интерфейсы, подобные этим, не везде доступны, верите или нет, а десятичные библиотеки стоят дороже, чем целочисленные.