Що банки насправді використовують як тип даних для грошей? [зачинено]


9

Я знаю кілька хороших варіантів :

  1. Великі цілі числа (наприклад, int64_t, mpz_t, будь-яка bignum lib ) для відображення центів або 10- n центів - скажімо, ціле число представляє 1/100 копійки (1,05 = $ = 10500). Це називається масштабним цілим числом .

  2. Бібліотека високого рівня для довільної арифметики з точністю, такою як BigDecimal у Java, Decimal у Python, decimal.js у Javascript, boost :: багатоточність у C ++

  3. Струни.

  4. Упаковані BCD (двійкові кодовані десяткові знаки) є більш езотеричним методом, який здався популярним у старому програмному забезпеченні. Читайте докладніше про це.

У виробничому коді для банків (або кредитних карт, банкоматів, POS-систем) який тип даних насправді використовується найбільше? Я особливо прошу тих, хто працював у банках.

РЕДАКТУВАННЯ: Супер корисні посилання для тих, хто має однакову проблемну область (потрібно впровадити структуру даних "гроші", яка не руйнується).

EDIT для того, хто сказав, що це повторне запитання : Це практичне, а не теоретичне питання про те, "що найкраще". Прочитайте неопубліковану назву мого запитання. Я запитую, що люди бачили з перших рук у кодових базах банків.

Я знаю, що BigDecimal є "найкращим" очевидно, але приємні API, такі, які доступні не скрізь, вірите чи ні, а десяткові бібліотеки дорогі на відміну від ints.


4
Вид банку, пов'язаний, хоча спеціально для банку. Кілька років тому я працював над системою, що займається трансакціями та платежами, і ми обійшли плаваючі помилки, запровадивши абсолютно новий тип даних, клас, що складається не тільки з двох 64-бітових цілих чисел, одне представляє ціле число, а друге десяткову частину.
Енді

1
Девід Пакер - це відмінна ідея. Я думаю, що це може бути краще, ніж загальна реалізація, яка є структурою з двох цілих чисел: велика кількість і показник (значення log_10)
zelcon

1
Питання потребує 4-го варіанту: BCD
Brendan

3
Щоб відповісти на запитання в заголовку, COBOL S9 (13) V99 COMP-3. Міститься в 8 8-бітових байтів.
Гілберт Ле Блан

2
Проблема, яку у вас тут є, "який банк". вони використовують COBOL, Java, C / C ++, .NET тощо - немає відповіді, яка відповідатиме тому, що ви хочете знати, оскільки кожен із них використовує різні типи. Ви можете запитати про резервне сховище, але навіть тоді використовуються десяткові типи Oracle або тип основного кадру, залежно від використовуваної технології.
gbjbaanb

Відповіді:


-2

Більшість банків все ще залишаються на мейнфреймі. Типи даних у мейнфреймах дуже незграбні до сучасних стандартів. Вони можуть бути просто цифрами, закодованими як символи. Отже, 1234,56 дійсно буде рядком, що містить ці цифри. І символ може бути 4, 6 або 9 біт. Або в "оптимізованих" ситуаціях можуть бути дві цифри, упаковані в один символ. Зрештою, для десяткового символу вам знадобляться лише 4 біти (nibble).

Вам було б цікаво, як на землі вони коли-небудь зверталися з цими рішеннями. Вони часто базуються на апаратній архітектурі. Ми звикли до множин 8-бітових архітектур. За старих часів це не було даром.

Unisys використовує 36-бітні слова, і слова можуть бути розбиті на 6-бітні, 9-бітні, 12-бітні або 18-бітні частини, перш ніж вони будуть використані для зберігання даних.

Тільки радійте, що нам більше не доведеться мати справу з цими речами. Рамка .NET має хороший тип, який називається десятковим, що добре підходить для валют.



2
-1 для " Типи даних на мейнфреймі - дуже незграбні до сьогоднішніх стандартів. Ви, очевидно, нічого не знаєте про мейнфрейми. IEEE-754 багато плаваючих знаків, десяткових даних тощо .
Росс Паттерсон

1
@Ross IEEE 754 був створений у 1985 році. Багато програмного забезпечення для мейнфреймів набагато старше. BCD та подібні кодування все ще дуже поширені в активних системах мейнфреймів. І вони не дуже добре порівнюють із сучасними кодуваннями. Але будь ласка, дайте нам правильну відповідь на питання. Ви, очевидно, багато знаєте про мейнфрейми. Хоча, здається, ваш час закінчився на пару десятиліть ... Просвічіть нас.
Мартін Маат

1
.NET має чудовий тип під назвою Decimal .. який дійсно повільний і не зовсім корисний при обробці мільйонів транзакцій. Слава богу, у нас є мейнфрейми з їх архаїчною, але швидкою обробкою даних.
gbjbaanb

1
@MartinMaat Упакований десятковий найпоширеніший для значень валют, коли я розпочав програмування в 1972 році. Це був базовий тип даних для сімейства IBM S / 360, і я вважаю, що до цього він був частиною комерційного варіанту в серії 1400.
Росс Паттерсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.