ธนาคารใช้อะไรเป็นประเภทข้อมูลเพื่อเงิน [ปิด]


9

ฉันตระหนักถึงตัวเลือกที่ดีบางอย่าง :

  1. จำนวนเต็มขนาดใหญ่ (เช่น int64_t, mpz_t, bignum libใด ๆ) เพื่อเป็นตัวแทนเซ็นต์หรือ 10 -nเซนต์ - พูดจำนวนเต็มแทน 1/100 ของเงิน ($ 1.05 == 10500) นี้เรียกว่าจำนวนเต็มปรับขนาด

  2. ไลบรารีระดับสูงสำหรับเลขทศนิยมทศนิยมที่มีความแม่นยำเช่นBigDecimalใน Java, Decimal ใน Python, decimal.js ใน Javascript, boost :: multiprecision ใน C ++

  3. เงื่อนไข

  4. BCD ที่อัดแน่น (ทศนิยมด้วยรหัสไบนารี) เป็นวิธีที่ลึกลับกว่าซึ่งดูเหมือนจะเป็นที่นิยมในซอฟต์แวร์เก่า อ่าน เพิ่มเติม เกี่ยวกับเรื่องนี้

ในรหัสการผลิตสำหรับธนาคาร (หรือบัตรเครดิต, ตู้ ATM, ระบบ POS) ประเภทของข้อมูลที่ใช้บ่อยที่สุดคืออะไร? ฉันถามคนที่ทำงานให้กับธนาคารเป็นพิเศษ

แก้ไข: ลิงค์ที่มีประโยชน์สุด ๆ สำหรับผู้ที่มีโดเมนปัญหาเดียวกัน (จำเป็นต้องใช้โครงสร้างข้อมูล "เงิน" ที่ไม่ทำลาย)

แก้ไขสำหรับเพื่อนที่พูดว่านี่เป็นคำถามที่ซ้ำกัน : นี่เป็นคำถามเชิงปฏิบัติไม่ใช่คำถามเชิงทฤษฎีของ "สิ่งที่ดีที่สุด" อ่านชื่อคำถามของฉันที่ยังไม่ได้แก้ไข ฉันถามสิ่งที่ผู้คนเห็นมือแรกในฐานรหัสของธนาคาร

ฉันรู้ว่า BigDecimal นั้น "ดีที่สุด" อย่างชัดเจน แต่ API ที่ดีเช่นนั้นไม่สามารถใช้ได้ทุกที่เชื่อหรือไม่และไลบรารี่แบบทศนิยมมีราคาแพงเมื่อเทียบกับ ints


4
ประเภทของธนาคารที่เกี่ยวข้องแม้ว่าจะไม่ใช่ธนาคารเฉพาะ ไม่กี่ปีที่ผ่านมาฉันทำงานเกี่ยวกับระบบที่เกี่ยวข้องกับธุรกรรมและการชำระเงินและเราเลี่ยงการใช้ floatbugs โดยแนะนำประเภทข้อมูลใหม่คลาสที่ประกอบด้วยไม่เพียง แต่ 64 บิตจำนวนเต็มสองบิตหนึ่งแทนจำนวนเต็มอีกส่วนหนึ่งเป็นทศนิยม
แอนดี้

1
David Packer นั่นเป็นความคิดที่ยอดเยี่ยม ฉันคิดว่ามันอาจจะดีกว่าการใช้งานทั่วไปซึ่งเป็นโครงสร้างของจำนวนเต็มสองจำนวน: จำนวนมากและเลขชี้กำลัง (ค่าของ log_10)
zelcon

1
คำถามต้องมีตัวเลือกที่ 4: BCD
Brendan

3
เพื่อตอบคำถามในชื่อ COBOL S9 (13) V99 COMP-3 พอดีใน 8 8 บิตไบต์
Gilbert Le Blanc

2
ปัญหาที่คุณมีที่นี่คือ "ธนาคารใด" พวกเขาใช้ COBOL, Java, C / C ++,. NET และอื่น ๆ - ไม่มีคำตอบที่เหมาะสมกับสิ่งที่คุณต้องการทราบเนื่องจากการใช้งานแต่ละประเภทต่างกัน คุณสามารถถามเกี่ยวกับที่เก็บข้อมูลสำรองได้ แต่ถึงจะเป็นทศนิยมแบบ Oracle หรือประเภทเมนเฟรมก็สามารถใช้ได้ทั้งนี้ขึ้นอยู่กับเทคโนโลยีที่ใช้
gbjbaanb

คำตอบ:


-2

ธนาคารส่วนใหญ่ยังคงอยู่ในเฟรมหลัก ประเภทข้อมูลบนเมนเฟรมนั้นค่อนข้างซุ่มซ่ามกับมาตรฐานของทุกวันนี้ อาจเป็นเพียงตัวเลขที่เข้ารหัสเป็นอักขระ ดังนั้น 1234.56 จะเป็นสตริงที่มีตัวเลขเหล่านั้น และตัวละครอาจเป็น 4, 6 หรือ 9 บิต หรือในสถานการณ์ "ปรับให้เหมาะสม" อาจมีตัวเลขสองหลักบรรจุในตัวละครเดียว ท้ายที่สุดคุณเพียงแค่ 4 บิต (ตอด) สำหรับอักขระทศนิยม

คุณจะสงสัยว่าพวกเขาเข้ามามีส่วนร่วมในการแก้ปัญหาเหล่านี้ได้อย่างไร พวกเขามักจะขึ้นอยู่กับสถาปัตยกรรมฮาร์ดแวร์ เราถูกใช้เพื่อทวีคูณของสถาปัตยกรรม 8 บิต ในสมัยก่อนนี้ไม่ได้รับ

Unisys ใช้คำศัพท์ 36- บิตและคำอาจแตกในส่วน 6 บิต, 9 บิต, 12 บิตหรือ 18 บิตก่อนที่พวกเขาจะใช้ในการจัดเก็บข้อมูล

แค่ดีใจที่เราไม่ต้องจัดการกับสิ่งนี้อีกต่อไป กรอบงาน. NET มีประเภทที่เรียกว่าทศนิยมซึ่งดีสำหรับสกุลเงิน


1
@gnat: นี่เป็นปีและค่อนข้างให้บริการตนเอง ธนาคารรักษาข้อมูลทางการเงินอย่างไร? เมนเฟรม
Gilbert Le Blanc

2
-1 สำหรับ " ประเภทข้อมูลบนเมนเฟรมนั้นค่อนข้างงุ่มง่ามกับมาตรฐานของวันนี้ " คุณรู้อะไรเกี่ยวกับเมนเฟรมอย่างชัดเจน IEEE-754 ลอยข้อมูลทศนิยม ฯลฯมาก
Ross Patterson

1
@Ross IEEE 754 ก่อตั้งขึ้นในปี 1985 ซอฟต์แวร์เมนเฟรมจำนวนมากมีอายุมากกว่ามาก BCD และการเข้ารหัสที่คล้ายกันนั้นยังคงพบได้บ่อยในระบบเมนเฟรมที่ใช้งานอยู่ และพวกเขาไม่เปรียบเทียบได้ดีกับการเข้ารหัสที่ทันสมัย แต่โปรดให้คำตอบที่ถูกกับคำถาม เห็นได้ชัดว่าคุณรู้มากเกี่ยวกับเฟรมหลัก แม้ว่าเวลาของคุณดูเหมือนจะถูกปิดโดยสองสามทศวรรษ ... สอนเรา
Martin Maat

1
.NET มีประเภทที่ดีที่เรียกว่าทศนิยม .. ซึ่งช้ามากและไม่มีประโยชน์อย่างแน่นอนเมื่อประมวลผลธุรกรรมหลายล้านรายการ ขอบคุณพระเจ้าที่เรามีเมนเฟรมที่มีความล้าสมัย แต่ก็รวดเร็วในการประมวลผลข้อมูล
gbjbaanb

1
@MartinMaat ทศนิยมแบบแพคเป็นเรื่องธรรมดาที่สุดสำหรับค่าสกุลเงินเมื่อฉันเริ่มเขียนโปรแกรมในปี 1972 มันเป็นประเภทข้อมูลพื้นฐานของตระกูล IBM S / 360 และฉันเชื่อว่าเป็นส่วนหนึ่งของตัวเลือกการค้าในซีรีส์ 1400 ก่อนหน้านั้น
Ross Patterson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.