我知道一些不错的选择:
大整数(例如int64_t,mpz_t,任何bignum lib)代表美分或10 -n美分-例如,整数代表1分钱的1分钱(1.05美元== 10500)。这称为缩放整数。
用于任意精度十进制算术的高级库,例如Java中的BigDecimal,Python中的Decimal,Javascript中的decimal.js,C ++中的boost :: multiprecision
字符串。
在银行(或信用卡,ATM,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并非随处可见,不管您信不信,并且十进制库相对于int而言昂贵。
4
与银行有关的种类,尽管不是专门针对银行。几年前,我在一个处理交易和支付的系统上工作,我们通过引入一个全新的数据类型(一个类,不仅由两个64位整数组成,一个代表整数,另一个代表小数部分)来规避了floatbug。
—
安迪
David Packer是个好主意。我认为这可能比通常的实现要好,后者是两个整数的结构:一个大数和一个指数(值的log_10)
—
zelcon
问题需要第4个选择:BCD
—
布伦丹
要回答标题中的问题,请使用COBOL S9(13)V99 COMP-3。可以容纳8个8位字节。
—
吉尔伯特·勒·布兰科
您在这里遇到的问题是“哪个银行”。他们使用COBOL,Java,C / C ++ 、. NET等-没有答案可以满足您的要求,因为它们每个都使用不同的类型。您可能会询问有关后备存储的信息,但是即使使用Oracle十进制类型,也可能使用大型机类型,具体取决于所使用的技术。
—
gbjbaanb