¿Qué utilizan realmente los bancos como tipo de datos para obtener dinero? [cerrado]

7

Soy consciente de algunas buenas opciones :

  1. Enteros grandes (por ejemplo, int64_t, mpz_t, cualquier bignum lib ) para representar céntimos o 10 centavos -n : digamos, un número entero representa 1/100 de un centavo ($ 1.05 == 10500). Esto se denomina entero escalado .

  2. Biblioteca de alto nivel para aritmética decimal de precisión arbitraria tal como BigDecimal en Java, Decimal en Python, decimal.js en Javascript, boost :: multiprecision en C ++

  3. Strings.

  4. BCD empaquetados (decimales codificados en binario) es un método más esotérico que parecía popular en el software antiguo. Leer more acerca de eso.

En el código de producción para bancos (o tarjetas de crédito, cajeros automáticos, sistemas POS), ¿qué tipo de datos se usa más? Especialmente pregunto a aquellos que trabajaron para bancos.

EDITAR: enlaces súper útiles para aquellos con el mismo dominio de problema (que necesitan implementar una estructura de datos "monetaria" que no se rompa).

EDITAR para el sujeto que dijo que esta es una pregunta duplicada : esta es una pregunta práctica, no teórica, de "cuál es el mejor". Lee el título sin editar de mi pregunta. Estoy preguntando qué personas han visto de primera mano en las bases de código de los bancos.

Sé que BigDecimal es "mejor", obviamente, pero las API buenas como esa no están disponibles en todas partes, lo creas o no, y las bibliotecas decimales son caras en lugar de ints.

    
pregunta zelcon5 14.02.2016 - 15:39

1 respuesta

-2

La mayoría de los bancos todavía están en mainframes. Los tipos de datos en mainframes son muy torpes a los estándares actuales. Pueden ser solo los dígitos codificados como caracteres. Entonces 1234.56 sería realmente una cadena que contiene esos dígitos. Y un personaje podría ser 4, 6 o 9 bits. O, en situaciones "optimizadas", podría haber dos dígitos agrupados en un carácter. Después de todo, solo necesitas 4 bits (un mordisco) para un carácter decimal.

Usted se preguntaría cómo demonios alguna vez se opusieron con estas soluciones. A menudo se basan en la arquitectura de hardware. Estamos acostumbrados a múltiplos de arquitecturas de 8 bits. En los viejos tiempos esto no era un hecho.

Unisys usa palabras de 36 bits y las palabras pueden dividirse en partes de 6 bits, 9 bits, 12 bits o 18 bits antes de que se utilicen para almacenar datos.

Solo alegra que ya no tendremos que lidiar con esto. El .NET framework tiene un buen tipo llamado decimal que es bueno para las monedas.

    
respondido por el Martin Maat 14.02.2016 - 16:51

Lea otras preguntas en las etiquetas