المدونة
كيف يحفظ Boring Expenses المال (ولماذا كعدد صحيح)
هناك طريقة كلاسيكية لتضييع سنت. اسأل أي لغة برمجة تقريبًا عن ناتج 0.1 + 0.2، وستجيبك 0.30000000000000004. هذا
ليس خطأً في اللغة، بل هكذا تعمل أعداد الفاصلة العائمة الثنائية: لا تستطيع تمثيل معظم الكسور العشرية بدقة، فتتسلل أخطاء
صغيرة. هذا مقبول في الفيزياء، لا في المال.
في تطبيق مالي، «صحيح تقريبًا» إجابة خاطئة. لذلك لا يحفظ Boring Expenses أي مبلغ كعدد عشري أبدًا.
حفظ أصغر وحدة كعدد صحيح
الحيلة التي تستخدمها برامج المال منذ زمن طويل هي العمل بأصغر وحدة وحفظها كعدد صحيح. بدلًا من 4.20 $ تحفظ 420، أي
عدد السنتات. الأعداد الصحيحة دقيقة. اجمع واطرح واحسب المجاميع طوال اليوم، ولن يتراكم أي غبار تقريب.
يذهب Boring Expenses خطوة أبعد فيحفظ المبالغ بوحدات فرعية دقيقة جدًا (تخيّل «100 مليون لكل وحدة»)، ما يترك متسعًا
واسعًا للعملات المختلفة واحتياجات المستقبل، مع إبقاء كل شيء Int بسيطًا. لا يحدث التحويل إلى ما تراه على الشاشة إلا
عند الأطراف: حين تكتب مبلغًا، وحين ننسّقه للعرض.
// للتوضيح فقط، وليس الشيفرة الفعلية:
let display = Decimal(amountInSubunits) / Decimal(subunitsPerUnit)
let text = display.formatted(.currency(code: userCurrency))
لماذا يهمك هذا
- المجاميع دقيقة. مجموع شهرك هو المجموع الحقيقي، لا رقمًا ينحرف سنتًا كلما طالت القائمة.
- المزامنة متسقة. العدد الصحيح يعني الشيء نفسه على iPhone وWatch وiPad. لا غموض يحتاج إلى تسوية.
- التصدير موثوق. ملف CSV الذي تصدّره يطابق التطبيق حتى آخر سنت.
قرار صغير وغير لافت، وهو بالضبط النوع الذي نحبه. لن تراه أبدًا، وهذا هو المقصود: الأرقام ببساطة متطابقة.