ฉันตระหนักถึงตัวเลือกที่ดีบางอย่าง :
จำนวนเต็มขนาดใหญ่ (เช่น int64_t, mpz_t, bignum libใด ๆ) เพื่อเป็นตัวแทนเซ็นต์หรือ 10 -nเซนต์ - พูดจำนวนเต็มแทน 1/100 ของเงิน ($ 1.05 == 10500) นี้เรียกว่าจำนวนเต็มปรับขนาด
ไลบรารีระดับสูงสำหรับเลขทศนิยมทศนิยมที่มีความแม่นยำเช่นBigDecimalใน Java, Decimal ใน Python, decimal.js ใน Javascript, boost :: multiprecision ใน C ++
เงื่อนไข
BCD ที่อัดแน่น (ทศนิยมด้วยรหัสไบนารี) เป็นวิธีที่ลึกลับกว่าซึ่งดูเหมือนจะเป็นที่นิยมในซอฟต์แวร์เก่า อ่าน เพิ่มเติม เกี่ยวกับเรื่องนี้
ในรหัสการผลิตสำหรับธนาคาร (หรือบัตรเครดิต, ตู้ ATM, ระบบ POS) ประเภทของข้อมูลที่ใช้บ่อยที่สุดคืออะไร? ฉันถามคนที่ทำงานให้กับธนาคารเป็นพิเศษ
แก้ไข: ลิงค์ที่มีประโยชน์สุด ๆ สำหรับผู้ที่มีโดเมนปัญหาเดียวกัน (จำเป็นต้องใช้โครงสร้างข้อมูล "เงิน" ที่ไม่ทำลาย)
- http://martinfowler.com/eaaDev/quantity.html
- http://www.codeproject.com/Articles/28244/A-Money-type-for-the-CLR
- http://c2.com/cgi/wiki?MoneyObject
- http://www.setfiremedia.com/blog/7-top-tips-for-coding-with-currency
- http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
แก้ไขสำหรับเพื่อนที่พูดว่านี่เป็นคำถามที่ซ้ำกัน : นี่เป็นคำถามเชิงปฏิบัติไม่ใช่คำถามเชิงทฤษฎีของ "สิ่งที่ดีที่สุด" อ่านชื่อคำถามของฉันที่ยังไม่ได้แก้ไข ฉันถามสิ่งที่ผู้คนเห็นมือแรกในฐานรหัสของธนาคาร
ฉันรู้ว่า BigDecimal นั้น "ดีที่สุด" อย่างชัดเจน แต่ API ที่ดีเช่นนั้นไม่สามารถใช้ได้ทุกที่เชื่อหรือไม่และไลบรารี่แบบทศนิยมมีราคาแพงเมื่อเทียบกับ ints