Cosa usano effettivamente le banche come tipo di dati per denaro? [chiuso]


9

Sono a conoscenza di alcune buone opzioni :

  1. Grandi numeri interi (ad esempio, int64_t, mpz_t, qualsiasi lib bignum ) per rappresentare centesimi o 10 -n centesimi - diciamo, un numero intero rappresenta 1/100 di un penny ($ 1,05 == 10500). Questo si chiama intero intero ridimensionato .

  2. Libreria di alto livello per l'aritmetica decimale di precisione arbitraria come BigDecimal in Java, Decimal in Python, decimal.js in Javascript, boost :: multiprecision in C ++

  3. Stringhe.

  4. I BCD compressi (decimali con codice binario) sono un metodo più esoterico che sembrava popolare nei vecchi software. Leggi di più al riguardo .

Nel codice di produzione per banche (o carte di credito, bancomat, sistemi POS), quale tipo di dati viene effettivamente utilizzato di più? Chiedo soprattutto a chi ha lavorato per le banche.

EDIT: collegamenti super utili per coloro che hanno lo stesso dominio problematico (è necessario implementare una struttura di dati "monetari" che non si interrompa).

EDIT per il collega che ha detto che questa è una domanda duplicata : questa è una domanda pratica non teorica di "qual è il migliore". Leggi il titolo inedito della mia domanda. Sto chiedendo che cosa la gente abbia visto in prima persona nelle basi di codice delle banche.

So che BigDecimal è "il migliore" ovviamente, ma API piacevoli come quelle non sono disponibili ovunque, che ci crediate o no, e le librerie decimali sono costose rispetto agli ints.


4
Tipo di banca relativa anche se non specificamente per una banca. Qualche anno fa ho lavorato su un sistema che si occupa di transazioni e pagamenti e abbiamo aggirato i floatbugs introducendo un tipo di dati completamente nuovo, una classe, composta non solo da due numeri interi a 64 bit, uno che rappresenta l'intero numero, l'altro la parte decimale.
Andy,

1
David Packer è un'ottima idea. Penso che potrebbe essere migliore dell'implementazione comune, che è una struttura di due numeri interi: un grande numero e l'esponente (il valore è log_10)
zelcon,

1
La domanda richiede una quarta opzione: BCD
Brendan,

3
Per rispondere alla domanda nel titolo, un COBOL S9 (13) V99 COMP-3. Adatto a 8 byte a 8 bit.
Gilbert Le Blanc,

2
Il problema che hai qui è "quale banca". usano COBOL, Java, C / C ++,. Potresti chiedere informazioni sull'archiviazione di backup, ma anche in questo caso verrebbero utilizzati i tipi decimali Oracle o un tipo di mainframe a seconda della tecnologia utilizzata.
gbjbaanb,

Risposte:


-2

La maggior parte delle banche sono ancora su mainframe. I tipi di dati sui mainframe sono molto goffi rispetto agli standard odierni. Possono essere solo le cifre codificate come caratteri. Quindi 1234.56 sarebbe davvero una stringa contenente quelle cifre. E un personaggio potrebbe essere 4, 6 o 9 bit. Oppure, in situazioni "ottimizzate", potrebbero esserci due cifre racchiuse in un personaggio. Dopotutto, hai solo bisogno di 4 bit (un bocconcino) per un carattere decimale.

Ti chiederesti come mai siano mai venuti fuori con queste soluzioni. Spesso si basano sull'architettura hardware. Siamo abituati a multipli di architetture a 8 bit. Ai vecchi tempi questo non era un dato di fatto.

Unisys utilizza parole a 36 bit e le parole possono essere suddivise in parti a 6 bit, 9 bit, 12 bit o 18 bit prima che vengano utilizzate per archiviare i dati.

Sii contento che non dovremo più occuparci di queste cose. Il framework .NET ha un bel tipo chiamato decimale che è buono per le valute.


1
@gnat: questo è un anno e un po 'self-service; In che modo le banche mantengono i dati finanziari? Mainframes .
Gilbert Le Blanc,

2
-1 per " I tipi di dati sui mainframe sono molto goffi rispetto agli standard di oggi. " Ovviamente non si sa nulla dei mainframe. I galleggianti IEEE-754, i dati decimali, ecc . Abbondano.
Ross Patterson,

1
@Ross IEEE 754 è stato fondato nel 1985. Molti software mainframe sono molto più vecchi. BCD e codifiche simili sono ancora molto comuni nei sistemi mainframe attivi. E non si confrontano bene con le codifiche moderne. Ma per favore, dacci la risposta giusta alla domanda. Ovviamente sai molto sui mainframe. Anche se il tuo tempismo sembra essere spento da un paio di decenni ... Illuminaci.
Martin Maat,

1
.NET ha un bel tipo chiamato Decimal .. che è veramente lento e non esattamente utile durante l'elaborazione di milioni di transazioni. Grazie a dio abbiamo i mainframe con la loro elaborazione dei dati arcaica, ma veloce.
gbjbaanb,

1
@MartinMaat Il decimale compresso era più comune per i valori di valuta, quando ho iniziato a programmare nel 1972. Era un tipo di dati di base sulla famiglia IBM S / 360 e credo che prima facesse parte dell'opzione commerciale sulla serie 1400.
Ross Patterson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.