আমরা সম্প্রতি এমন একটি সিস্টেম বাস্তবায়ন করেছি যার একাধিক মুদ্রায় মানগুলি হ্যান্ডেল করা এবং তাদের মধ্যে রূপান্তর করা দরকার এবং কয়েকটি বিষয় কঠোরভাবে খুঁজে বের করতে হবে।
অর্থের জন্য ফ্লাইটিং পয়েন্ট সংখ্যা কখনও ব্যবহার করবেন না
ভাসমান বিন্দু গাণিতিকগুলি এমন অনর্থকগুলি পরিচয় করিয়ে দেয় যা এগুলি কিছু আপ না করা পর্যন্ত লক্ষ্য করা যায় না। সমস্ত মানগুলি হয় পূর্ণসংখ্যা বা স্থির দশমিক ধরণের হিসাবে সংরক্ষণ করা উচিত এবং আপনি যদি একটি নির্দিষ্ট দশমিক প্রকার ব্যবহার করতে চান তবে নিশ্চিত হন যে হুডের নীচে সেই ধরণেরটি কী করে (যেমন অভ্যন্তরীণভাবে এটি পূর্ণসংখ্যা বা ভাসমান বিন্দু ব্যবহার করে) টাইপ)।
যখন আপনার গণনা বা রূপান্তরগুলি করতে হবে:
- ভাসমান বিন্দুতে মান রূপান্তর করুন
- নতুন মান গণনা করুন
- সংখ্যাটি বৃত্তাকার করুন এবং এটিকে পূর্বে পূর্ণসংখ্যায় রূপান্তর করুন
পদক্ষেপ 3-এ কোনও ভাসমান পয়েন্ট সংখ্যাটি পূর্বে পূর্ণসংখ্যায় রূপান্তর করার সময়, কেবল এটি নিক্ষেপ করবেন না - প্রথমে এটিকে বৃত্তাকারে গণিত ফাংশনটি ব্যবহার করুন। এটি সাধারণত হবে round
, যদিও বিশেষ ক্ষেত্রে এটি হতে পারে floor
বা ceil
। পার্থক্যটি জানুন এবং সাবধানে চয়ন করুন।
মানের পাশাপাশি একটি সংখ্যার ধরণ সংরক্ষণ করুন
আপনি যদি কেবল একটি মুদ্রা পরিচালনা করেন তবে এটি আপনার পক্ষে ততটা গুরুত্বপূর্ণ হতে পারে না, তবে একাধিক মুদ্রা পরিচালনা করার ক্ষেত্রে এটি আমাদের পক্ষে গুরুত্বপূর্ণ। আমরা মুদ্রার জন্য 3-অক্ষর কোড ব্যবহার করি, যেমন ইউএসডি, জিবিপি, জেপিওয়াই, EUR, ইত্যাদি etc.
পরিস্থিতির উপর নির্ভর করে এটি সঞ্চয় করতেও সহায়ক হতে পারে:
- নম্বরটি করের আগে বা পরে (এবং করের হার কী ছিল)
- নম্বরটি কোনও রূপান্তরের ফলাফল কিনা (এবং এটি কী রূপান্তরিত হয়েছিল)
আপনি যে সংখ্যাগুলির সাথে আচরণ করছেন তার যথার্থতা সীমাটি জানুন
বাস্তব মানগুলির জন্য, আপনি মুদ্রার ক্ষুদ্রতম ইউনিটের মতো যথাযথ হতে চান। এর অর্থ আপনার এক শতাংশ, এক পয়সা, ইয়েন, একটি শাল ইত্যাদির চেয়ে কম মূল্য নেই, কারণ ছাড়াই উচ্চতর নির্ভুলতার সাথে মানগুলি সংরক্ষণ করবেন না।
অভ্যন্তরীণভাবে, আপনি ছোট মানগুলি নিয়ে কাজ করতে বেছে নিতে পারেন, সেই ক্ষেত্রে এটি বিভিন্ন ধরণের মুদ্রার মান । আপনার কোডটি কোনটি এবং কোনটি মিশ্রিত হবে না তা নিশ্চিত করুন। এখানেও ভাসমান পয়েন্টের মানগুলি এড়িয়ে চলুন।
এই সমস্ত নিয়ম একসাথে যুক্ত করে আমরা নীচের বিধিগুলির বিষয়ে সিদ্ধান্ত নিয়েছি। চলমান কোডে, মুদ্রাগুলি ক্ষুদ্রতম ইউনিটের জন্য একটি পূর্ণসংখ্যা ব্যবহার করে সংরক্ষণ করা হয়।
class Currency {
String code; // eg "USD"
int value; // eg 2500
boolean converted;
}
class Price {
Currency grossValue;
Currency netValue;
Tax taxRate;
}
ডাটাবেসে মানগুলি নিম্নলিখিত বিন্যাসে স্ট্রিং হিসাবে সংরক্ষণ করা হয়:
USD:2500
এটি 25.00 ডলার এর মান সঞ্চয় করে। আমরা কেবল এটি করতে পেরেছিলাম কারণ মুদ্রার সাথে সম্পর্কিত কোডটি ডাটাবেস স্তরের মধ্যে থাকা দরকার নেই, তাই সমস্ত মান প্রথমে মেমরিতে রূপান্তরিত হতে পারে। অন্যান্য পরিস্থিতি নিঃসন্দেহে নিজেকে অন্য সমাধানে leণ দেবে।
এবং যদি আমি আগে এটি পরিষ্কার করে না দিয়েছি তবে ভাসা ব্যবহার করবেন না!