ব্লগ
Boring Expenses কীভাবে টাকা সংরক্ষণ করে (আর কেন তা পূর্ণসংখ্যা)
এক পয়সা হারানোর একটা ক্লাসিক উপায় এই। প্রায় যেকোনো প্রোগ্রামিং ভাষাকে জিজ্ঞেস করুন 0.1 + 0.2 কত, সে বলবে 0.30000000000000004। এটা ভাষার কোনো বাগ নয় — বাইনারি ফ্লোটিং-পয়েন্ট সংখ্যা এভাবেই কাজ করে। বেশিরভাগ দশমিক ভগ্নাংশ এরা নিখুঁতভাবে প্রকাশ করতে পারে না, তাই ছোট্ট ভুল ঢুকে পড়ে। পদার্থবিজ্ঞানের জন্য ঠিক আছে; টাকার জন্য নয়।
ফিন্যান্স অ্যাপের জন্য “প্রায় ঠিক” ভুল উত্তর। তাই Boring Expenses কোনো পরিমাণ কখনো দশমিক হিসেবে সংরক্ষণই করে না।
সবচেয়ে ছোট একককে পূর্ণসংখ্যা হিসেবে রাখুন
টাকার সফটওয়্যার চিরকাল যে কৌশল ব্যবহার করে এসেছে, তা হলো সবচেয়ে ছোট এককে কাজ করা আর তা পূর্ণসংখ্যা হিসেবে রাখা। $4.20-এর বদলে আপনি রাখেন 420 — সেন্টের সংখ্যা। পূর্ণসংখ্যা নিখুঁত। সারা দিন যোগ, বিয়োগ, মোট করুন — রাউন্ডিংয়ের ধুলো কখনো জমবে না।
Boring Expenses আরও এক ধাপ এগিয়ে পরিমাণগুলো খুব সূক্ষ্ম উপ-এককে রাখে (ভাবুন “প্রতি পূর্ণ এককে ১০ কোটি”), যা মুদ্রা আর ভবিষ্যতের প্রয়োজনের জন্য প্রচুর জায়গা রাখে, অথচ সবকিছু থাকে একটি সাধারণ Int। পর্দায় আপনি যা দেখেন তাতে এবং তা থেকে রূপান্তর ঘটে একেবারে কিনারায় — যখন আপনি পরিমাণ লেখেন, আর যখন আমরা তা দেখানোর জন্য ফরম্যাট করি।
// উদাহরণ, হুবহু কোড নয়:
let display = Decimal(amountInSubunits) / Decimal(subunitsPerUnit)
let text = display.formatted(.currency(code: userCurrency))
এটা আপনার জন্য কেন গুরুত্বপূর্ণ
- মোট একদম নির্ভুল। আপনার মাসিক যোগফলই আসল যোগফল, এমন কোনো সংখ্যা নয় যা তালিকা বাড়ার সঙ্গে এক পয়সা সরে যায়।
- সিঙ্ক সামঞ্জস্যপূর্ণ থাকে। একটি পূর্ণসংখ্যার মানে আপনার iPhone, Watch আর iPad-এ একই। মেলানোর মতো কোনো অস্পষ্টতা নেই।
- এক্সপোর্টে ভরসা করা যায়। আপনি যে CSV এক্সপোর্ট করেন, তা অ্যাপের সঙ্গে পাই-পয়সা পর্যন্ত মেলে।
এটা একটা ছোট, জাঁকজমকহীন সিদ্ধান্ত — ঠিক যেমনটা আমাদের পছন্দ। আপনি কখনো এটা দেখবেন না, আর সেটাই উদ্দেশ্য: সংখ্যাগুলো স্রেফ মিলে যায়।