银行实际上将什么用作货币数据类型?[关闭]


9

我知道一些不错的选择

  1. 大整数(例如int64_t,mpz_t,任何bignum lib)代表美分或10 -n美分-例如,整数代表1分钱的1分钱(1.05美元== 10500)。这称为缩放整数

  2. 用于任意精度十进制算术的高级库,例如Java中的BigDecimal,Python中的Decimal,Javascript中的decimal.js,C ++中的boost :: multiprecision

  3. 字符串。

  4. 打包的BCD(二进制编码的十进制)是一种更加神秘的方法,在旧软件中似乎很流行。了解 更多 关于它。

在银行(或信用卡,ATM,POS系统)的生产代码中,实际使用最多的数据类型是什么?我特别要问那些为银行工作的人。

编辑:对于那些具有相同问题域的超级有用的链接(需要实现不中断的“金钱”数据结构)。

编辑说这是一个重复问题的同伴:这是一个实际的问题,而不是“什么是最好的”的理论问题。阅读我问题的未编辑标题。我问的是人们在银行的代码库中亲眼目睹了什么。

我知道BigDecimal显然是“最佳”的,但是类似的漂亮API并非随处可见,不管您信不信,并且十进制库相对于int而言昂贵。


4
与银行有关的种类,尽管不是专门针对银行。几年前,我在一个处理交易和支付的系统上工作,我们通过引入一个全新的数据类型(一个类,不仅由两个64位整数组成,一个代表整数,另一个代表小数部分)来规避了floatbug。
安迪

1
David Packer是个好主意。我认为这可能比通常的实现要好,后者是两个整数的结构:一个大数和一个指数(值的log_10)
zelcon

1
问题需要第4个选择:BCD
布伦丹

3
要回答标题中的问题,请使用COBOL S9(13)V99 COMP-3。可以容纳8个8位字节。
吉尔伯特·勒·布兰科

2
您在这里遇到的问题是“哪个银行”。他们使用COBOL,Java,C / C ++ 、. NET等-没有答案可以满足您的要求,因为它们每个都使用不同的类型。您可能会询问有关后备存储的信息,但是即使使用Oracle十进制类型,也可能使用大型机类型,具体取决于所使用的技术。
gbjbaanb

Answers:


-2

大多数银行仍在大型机上。大型机上的数据类型对于当今的标准非常笨拙。它们可能只是编码为字符的数字。因此1234.56确实是包含这些数字的字符串。一个字符可以是4、6或9位。或者,在“优化”情况下,一个字符中可能包含两个数字。毕竟,十进制字符只需要4位(半字节)。

您会想知道他们到底是如何选择这些解决方案的。它们通常基于硬件体系结构。我们习惯于8位架构的倍数。在过去,这不是必然的。

Unisys使用36位字,在将它们用于存储数据之前,可以将这些字分解为6位,9位,12位或18位部分。

只是很高兴我们不再需要处理这些东西。.NET框架有一个很好的类型,称为十进制,适合于货币。


1
@gnat:今年一岁,有点自私;银行如何维护财务数据?大型机
吉尔伯特·勒布朗克

2
-1表示“ 大型机上的数据类型对于今天的标准非常笨拙。 ”显然,您对大型机一无所知。IEEE-754浮点数,十进制数据 比比皆是。
罗斯·帕特森

1
@Ross IEEE 754成立于1985年。许多大型机软件都比较老。BCD和类似的编码在活动大型机系统中仍然很常见。而且它们不能与现代编码很好地比较。但是请给我们正确的答案。您显然对大型机了解很多。尽管您的时间安排似乎已经过去了几十年,但请启迪。
马丁·马特

1
.NET有一个很好的类型,称为Decimal ..,它确实很慢,在处理数百万个事务时并不是十分有用。谢天谢地,我们有大型机及其古老而又快速的数据处理。
gbjbaanb

1
@MartinMaat 1972年我开始编程时,对于货币值,压缩十进制最为常见。它是IBM S / 360系列的基本数据类型,我相信在此之前它是1400系列商业选项的一部分。
罗斯·帕特森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.