Bankalar para için veri türü olarak gerçekte ne kullanıyor? [kapalı]


9

Birkaç iyi seçeneğin farkındayım :

  1. Sentleri veya 10 - senti temsil etmek için büyük tamsayılar (örn. İnt64_t, mpz_t, herhangi bir bignum lib ) - diyelim ki, bir tamsayı bir kuruşun 1 / 100'ünü ($ 1.05 == 10500) temsil eder. Buna ölçekli tam sayı denir .

  2. Java'da BigDecimal , Python'da Decimal, Javascript'te decimal.js, boost :: C ++ 'da multiprecision gibi rasgele kesinlik ondalık aritmetik için üst düzey kitaplık

  3. Teller.

  4. Paket BCD'ler (ikili kodlu ondalık sayılar), eski yazılımlarda popüler görünen daha ezoterik bir yöntemdir. Oku daha hakkında o.

Bankalar (veya kredi kartları, ATM'ler, POS sistemleri) için üretim kodunda, gerçekte en çok hangi veri türü kullanılır? Özellikle banka çalışanlarına soruyorum.

EDIT: Aynı sorun etki alanına sahip olanlar için süper yararlı bağlantılar (kırılmayan bir "para" veri yapısı uygulamak gerekir).

Bunun yinelenen bir soru olduğunu söyleyen arkadaş için EDIT : Bu, "en iyi olanın" teorik değil pratik bir sorusudur. Sorumun düzenlenmemiş başlığını okuyun. İnsanların bankaların kod tabanlarında ilk elden ne gördüklerini soruyorum.

Açıkçası BigDecimal "en iyi" olduğunu biliyorum, ama böyle güzel API her yerde mevcut değil, ister inanın ister inanmayın, ve ondalık kütüphaneler ints aksine pahalı.


4
Belirli bir banka için olmasa da, ilgili banka türü. Birkaç yıl önce işlemler ve ödemelerle uğraşan bir sistem üzerinde çalıştım ve floatbug'ları tamamen yeni bir veri tipi, sadece bir tane sayıyı temsil eden, diğeri ondalık kısmı temsil eden iki 64bit tamsayıdan oluşan bir sınıf tanıtarak atlattık.
Andy

1
David Packer bu harika bir fikir. Ben iki tamsayıların bir yapı olan ortak uygulama daha iyi olabilir düşünüyorum: büyük bir sayı ve üs (değerin log_10)
zelcon

1
Sorunun 4. bir seçeneğe ihtiyacı var: BCD
Brendan

3
Başlıktaki soruyu cevaplamak için bir COBOL S9 (13) V99 COMP-3. 8 8 bit bayta sığar.
Gilbert Le Blanc

2
Burada yaşadığınız sorun "hangi banka". COBOL, Java, C / C ++, .NET vb. kullanırlar - bunların her biri farklı türler kullandığından bilmek istediğiniz şeye uyacak bir cevap yoktur. Destek depolama alanını sorabilirsiniz, ancak o zaman bile Oracle ondalık türleri veya kullanılan teknolojiye bağlı olarak bir ana çerçeve türü kullanılır.
gbjbaanb

Yanıtlar:


-2

Çoğu banka hala ana karelerde. Ana bilgisayarlardaki veri türleri günümüz standartlarına göre çok sakar. Bunlar sadece karakter olarak kodlanmış rakamlar olabilir. Yani 1234.56 gerçekten bu rakamları içeren bir dize olacaktır. Ve bir karakter 4, 6 veya 9 bit olabilir. Veya "optimize edilmiş" durumlarda, bir karakterde paketlenmiş iki rakam olabilir. Sonuçta, ondalık karakter için sadece 4 bit (bir kırıntı) gerekir.

Bu çözümlerle dünyaya nasıl geldiklerini merak edeceksiniz. Genellikle donanım mimarisine dayanırlar. 8-bit mimarilerin katlarına alışkınız. Eski günlerde bu bir verilen değildi.

Unisys 36 bitlik sözcükler kullanır ve sözcükler veri depolanmadan önce 6 bitlik, 9 bitlik, 12 bitlik veya 18 bitlik bölümlerde parçalanabilir.

Sadece bu şeylerle uğraşmak zorunda kalmayacağımız için mutlu ol. .NET çerçevesi, para birimleri için iyi olan ondalık adı verilen güzel bir türe sahiptir.


1
@gnat: Bu bir yaşında ve biraz kendi kendine hizmet; Bankalar Finansal Verileri Nasıl Koruyor? Ana bilgisayarlar .
Gilbert Le Blanc

2
-1 için " Ana karelerdeki veri türleri bugünün standartlarına göre çok sakar. " Ana kareler hakkında hiçbir şey bilmiyorsunuz. IEEE-754 yüzer, ondalık veri vb. Boldur.
Ross Patterson

1
@Ross IEEE 754 1985 yılında kurulmuştur. Birçok ana bilgisayar yazılımı çok daha eskidir. BCD ve benzeri kodlamalar aktif ana sistemlerde hala çok yaygındır. Ve modern kodlamalarla iyi karşılaştırmazlar. Ama lütfen, soruya doğru cevabı verin. Ana kareler hakkında çok şey biliyorsunuz. Zamanlamanız birkaç on yıl geçmiş gibi görünse de ... Bizi aydınlatın.
Martin Maat

1
.NET, Decimal adında güzel bir türe sahiptir. Bu, milyonlarca işlem yapılırken gerçekten yavaş ve tam olarak kullanışlı değildir. Çok şükür ki arkaik ama hızlı veri işlemeleri ile anabilgisayarlarımız var.
gbjbaanb

1
@MartinMaat Paket ondalık, 1972'de programlamaya başladığımda para birimi değerleri için en yaygın olanıydı. IBM S / 360 ailesinin temel veri tipiydi ve bundan önce 1400 serisindeki ticari seçeneğin bir parçası olduğuna inanıyorum.
Ross Patterson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.