8 คะแนน โดย GN⁺ 2024-10-09 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • การจัดการจำนวนเงินเป็นงานคอมพิวเตอร์ที่พบได้ทั่วไป แต่ภาษาการเขียนโปรแกรมกระแสหลักไม่มีชนิดข้อมูลพื้นฐานสำหรับแทนจำนวนเงิน
  • สิ่งนี้อาจก่อให้เกิดปัญหาการปัดเศษในงานอย่างการผ่อนชำระ การแลกเปลี่ยนเงินตราต่างประเทศ การประมวลผลค่าธรรมเนียม และการจัดเก็บภาษี
  • Money คือไลบรารี Kotlin ที่ช่วยให้การคำนวณและการจัดสรรจำนวนเงินทำได้ง่ายขึ้น
    • รองรับการคำนวณทางคณิตศาสตร์ของจำนวนเงิน การคำนวณเปอร์เซ็นต์ และการจัดสรร เพื่อใช้จำลองกรณีการใช้งานที่หลากหลาย
    • รองรับคริปโทเคอร์เรนซีโดยพื้นฐานด้วย
  • ความสามารถด้านการจัดสรร
    • หนึ่งในจุดเด่นที่สุดของไลบรารีคือความสามารถด้านการจัดสรร
    • สามารถแบ่งจำนวนเงินออกเป็นหลายส่วนโดยยังคงรับประกันว่าเท่ากับจำนวนเงินเดิม
    • ตัวอย่างเช่น เมื่อผู้ใช้จ่ายเงินสำหรับการซื้อ USD 100.00 แบบผ่อน 3 งวด ก็สามารถป้องกันการสูญเสียจากปัญหาการปัดเศษได้
  • วิธีการจัดสรร
    • ใช้เมธอด allocate() เพื่อรับประกันว่าผลลัพธ์จะไม่ต่างจากจำนวนเงินต้นฉบับ
    • หากต้องการจัดสรรตามสัดส่วน ให้ส่งค่าของ Percentage เป็นลิสต์
    • โดยค่าเริ่มต้น ไลบรารีจะจัดสรรส่วนต่างให้อัตโนมัติ แต่ก็สามารถปรับเป็นกลยุทธ์การจัดสรรตามต้องการได้
  • สรุป
    • บทความนี้เป็นเพียงการแนะนำความสามารถของไลบรารีแบบสั้น ๆ
    • มีแผนจะคงความกระชับของ API ไว้ พร้อมทั้งค่อย ๆ ขยายการรองรับการพัฒนา Android รวมถึงความสามารถด้าน persistence และ serialization
    • หวังว่าเวอร์ชันปัจจุบันจะเป็นประโยชน์ต่อผู้ที่ต้องจัดการจำนวนเงินในโปรเจ็กต์ Kotlin

สรุปโดย GN⁺

  • การจัดการจำนวนเงินเป็นงานที่พบได้บ่อยในการเขียนโปรแกรม แต่สามารถซับซ้อนได้จากปัญหาการปัดเศษ
  • ไลบรารี Money เป็นไลบรารี Kotlin ที่ออกแบบมาเพื่อแก้ปัญหาเหล่านี้ โดยรองรับการจัดสรรและการคำนวณจำนวนเงินอย่างแม่นยำ
  • ไลบรารีนี้รองรับ 306 สกุลเงินและ 2283 คริปโทเคอร์เรนซี จึงมีประโยชน์สำหรับการจัดการจำนวนเงินในโปรเจ็กต์ Kotlin
  • โปรเจ็กต์อื่นที่มีความสามารถคล้ายกัน ได้แก่ไลบรารี Joda-Money ของ Java

1 ความคิดเห็น

 
GN⁺ 2024-10-09
ความคิดเห็นจาก Hacker News
  • การใช้ฟังก์ชัน infix ให้ความรู้สึกแปลกนิดหน่อย

    • เวลาจะออกแบบ API ใน Kotlin ก็น่าจะใช้ extension function หรือ extension property แบบทั่วไปมากกว่า
    • สงสัยว่าทำไมถึงไม่ overload plus และ minus แทน increaseBy กับ decreaseBy
  • ขอแสดงความยินดีกับไลบรารี และขอบคุณที่นำมาแชร์

    • ระบบหน่วยของ F# หรือ C# อาจคล้ายกับการคำนวณเงินได้
    • กำลังพัฒนา backtester ที่เน้นความแม่นยำใน Rust และสินทรัพย์ถูกประเมินค่าเป็นสกุลเงิน
    • สงสัยว่าเวลาจำลองจะถือว่าสถานที่ซื้อขายทำงานอยู่เสมอได้หรือไม่
    • สงสัยว่ามีข้อมูลสาธารณะเกี่ยวกับอัตราแลกเปลี่ยนหรือไม่
    • สงสัยว่าควรเลือกใช้อัตราแลกเปลี่ยนใดตอนทำธุรกรรม
    • สงสัยว่ามีวิธีที่ดีที่สุดสำหรับการปัดเศษหรือไม่
    • สงสัยว่าควรหักภาษีทันทีหรือไม่
    • กำลังคิดว่าจะทำโมเดลเงินเฟ้อหรือไม่ ตอนนี้ตั้งใจจะมองข้ามไปก่อนแล้วค่อยปรับตอนท้าย
  • ทำให้นึกถึงการใช้งานชนิดข้อมูลเงินของ Rebol

    • ระบบชนิดข้อมูลของ Rebol มีความยืดหยุ่นในการแสดงออกสูงมาก
    • หวังว่าจะมีไลบรารีที่มอบประสบการณ์แบบนี้มากขึ้น
  • มีคำถามเกี่ยวกับ edge case ที่เกิดขึ้นระหว่างการจัดการเงิน

    • คาดว่าเมื่อนำค่าจากคนละสกุลเงินมาบวกกันจะเกิด runtime exception
    • สงสัยว่าสามารถระบุกฎการปัดเศษได้หรือไม่เมื่อหาร $2.00 ด้วย 3
    • สงสัยว่าจัดการกับหลักทศนิยมส่วนเกินอย่างไรตอน parse ข้อมูลที่ผู้ใช้ป้อน
    • สงสัยว่าไลบรารีจัดการอย่างไรเมื่อข้อมูลอยู่นอกกฎจำนวนหลัก
  • ชอบที่รองรับสกุลเงินแบบกำหนดเอง

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

    • การทำงานอัตโนมัติด้วยสเปรดชีตเป็นเรื่องที่ดี และสามารถได้ผลลัพธ์ที่น่าทึ่งจากภาษาที่ให้ความสำคัญกับชนิดข้อมูลอย่างจริงจัง
  • ชนิดข้อมูล decimal ของ C# เหมาะกับการคำนวณเงิน

  • ได้เรียนรู้อะไรมากมายจากคอมเมนต์ และมันจะช่วยกับการพัฒนาไลบรารีรอบถัดไป

  • อยากได้ชุดทดสอบที่ครอบคลุมและเข้มข้นสำหรับจัดการทุก edge case มากกว่าตัวไลบรารีเอง

    • มีความคิดเกี่ยวกับการใช้ชนิดข้อมูลแบบเข้มงวด
    • รู้สึกแปลกที่ภาษาโปรแกรมระดับล่างจำนวนมากยังคงใช้ uint64, size_t เป็นต้น
  • ดูเหมือนว่าจะตรงตามความต้องการทั้งหมด และมีการพูดคุยที่ดีเกี่ยวกับความยากหลักของการจัดการเงิน