بلاگ
Boring Expenses پیسہ کیسے محفوظ کرتی ہے (اور یہ انٹیجر کیوں ہے)
ایک پیسہ کھونے کا یہ ایک کلاسیکی طریقہ ہے۔ تقریباً کسی بھی پروگرامنگ زبان سے پوچھیں کہ 0.1 + 0.2 کتنا ہوتا ہے اور وہ کہے گی 0.30000000000000004۔ یہ زبان کی خرابی نہیں — بائنری فلوٹنگ پوائنٹ اعداد ایسے ہی کام کرتے ہیں۔ وہ زیادہ تر اعشاری کسور کو ٹھیک ٹھیک ظاہر نہیں کر سکتے، اس لیے ننھی غلطیاں در آتی ہیں۔ طبیعیات کے لیے ٹھیک؛ پیسے کے لیے نہیں۔
فنانس ایپ کے لیے “تقریباً ٹھیک” غلط جواب ہے۔ اس لیے Boring Expenses کوئی رقم کبھی اعشاریہ کے طور پر محفوظ ہی نہیں کرتی۔
سب سے چھوٹی اکائی کو مکمل عدد کے طور پر رکھیں
مالیاتی سافٹ ویئر ہمیشہ سے جو ترکیب استعمال کرتا آیا ہے وہ یہ ہے کہ سب سے چھوٹی اکائی میں کام کریں اور اسے انٹیجر رکھیں۔ $4.20 کے بجائے آپ 420 رکھتے ہیں — سینٹس کی تعداد۔ انٹیجر بالکل درست ہوتے ہیں۔ دن بھر جمع، تفریق اور کل نکالیں، راؤنڈنگ کی گرد کبھی جمع نہیں ہوگی۔
Boring Expenses اس سے ایک قدم آگے جاتی ہے اور رقمیں بہت باریک ذیلی اکائیوں میں رکھتی ہے (سوچیں “ہر مکمل اکائی کے 10 کروڑ”)، جو کرنسیوں اور مستقبل کی ضروریات کے لیے کافی گنجائش چھوڑتی ہے جبکہ سب کچھ ایک سادہ Int ہی رہتا ہے۔ اسکرین پر جو آپ دیکھتے ہیں اس میں اور اس سے تبدیلی بالکل کناروں پر ہوتی ہے — جب آپ رقم لکھتے ہیں، اور جب ہم اسے دکھانے کے لیے فارمیٹ کرتے ہیں۔
// وضاحت کے لیے، اصل کوڈ نہیں:
let display = Decimal(amountInSubunits) / Decimal(subunitsPerUnit)
let text = display.formatted(.currency(code: userCurrency))
یہ آپ کے لیے کیوں اہم ہے
- کل بالکل درست ہیں۔ آپ کا ماہانہ جوڑ اصل جوڑ ہے، کوئی ایسا عدد نہیں جو فہرست بڑھنے کے ساتھ ایک پیسہ کھسک جائے۔
- سنک یکساں رہتا ہے۔ ایک انٹیجر کا مطلب آپ کے آئی فون، Watch اور آئی پیڈ پر ایک ہی ہوتا ہے۔ ملانے کو کوئی ابہام نہیں۔
- برآمدات قابلِ اعتماد ہیں۔ جو CSV آپ برآمد کرتے ہیں وہ ایپ سے پائی پائی ملتی ہے۔
یہ ایک چھوٹا، غیر دلکش فیصلہ ہے — بالکل ویسا جیسا ہمیں پسند ہے۔ آپ اسے کبھی نہیں دیکھیں گے، اور یہی مقصد ہے: اعداد بس درست جڑتے ہیں۔