সি # তে অর্থের জন্য ব্যবহারের জন্য সেরা ডেটা টাইপ কী?
using System.ComponentModel.DataAnnotations;
... [DataType(DataType.Currency)]
এমএসডিএন.মাইক্রোসফটকম
সি # তে অর্থের জন্য ব্যবহারের জন্য সেরা ডেটা টাইপ কী?
using System.ComponentModel.DataAnnotations;
... [DataType(DataType.Currency)]
এমএসডিএন.মাইক্রোসফটকম
উত্তর:
এটি দশমিক হিসাবে বর্ণিত হিসাবে:
দশমিক কীওয়ার্ডটি 128-বিট ডেটা টাইপ নির্দেশ করে। ভাসমান-বিন্দুর ধরণের তুলনায় দশমিক ধরণের আরও সূক্ষ্মতা এবং একটি ছোট পরিসীমা রয়েছে, যা এটি আর্থিক এবং আর্থিক গণনার জন্য উপযুক্ত করে তোলে ।
আপনি নিম্নলিখিত হিসাবে একটি দশমিক ব্যবহার করতে পারেন:
decimal myMoney = 300.5m;
দশমিক মান ধরণের দশমিক সংখ্যাগুলি ধনাত্মক 79,228,162,514,264,337,593,543,950,335 থেকে negativeণাত্মক 79,228,162,514,264,337,593,543,950,335 পর্যন্ত প্রতিনিধিত্ব করে। দশমিক মান ধরণের আর্থিক গণনার জন্য উপযুক্ত যেগুলি বৃহত সংখ্যক উল্লেখযোগ্য ইন্টিগ্রাল এবং ভগ্নাংশের অঙ্কের প্রয়োজন এবং কোনও বৃত্তাকার বন্ধ ত্রুটি নেই। দশমিক প্রকারটি বৃত্তাকার জন্য প্রয়োজনীয়তা দূর করে না। বরং এটি গোল করার কারণে ত্রুটিগুলি হ্রাস করে।
কেন ডাবল ব্যবহার করা উচিত নয় তা জেনেজ করে আমি এই দুর্দান্ত উত্তরের দিকে ইঙ্গিত করতে চাই ।
এন্টারপ্রাইজ অ্যাপ্লিকেশন আর্কিটেকচারের ধরণগুলি থেকে অর্থের প্যাটার্ন ব্যবহার করুন ; দশমিক হিসাবে পরিমাণ এবং এনুম হিসাবে মুদ্রা নির্দিষ্ট করুন।
Money
প্রকল্পের সাইটের জন্য এই নুগেটের একটি ডেড গিথুব লিঙ্ক রয়েছে ... তাই কোনও ডক্স নেই?
ডেসিমাল। আপনি যদি দ্বিগুণ চয়ন করেন তবে আপনি নিজেকে গোলাকার ত্রুটির জন্য উন্মুক্ত রেখে চলেছেন
double
রাউন্ডিং ত্রুটিগুলি প্রবর্তন করতে পারে কারণ ভাসমান পয়েন্ট সমস্ত সংখ্যককে সঠিকভাবে উপস্থাপন করতে পারে না (উদাহরণস্বরূপ 0.01 ভাসমান পয়েন্টে কোনও সঠিক প্রতিনিধিত্ব নেই)। Decimal
অন্যদিকে, সংখ্যাগুলি হুবহু উপস্থাপন করে । (বাণিজ্য বন্ধটি ভাসমান পয়েন্টের তুলনায় একটি ছোট পরিসীমা রয়েছে) ভাসমান পয়েন্ট আপনাকে * অজানা * বৃত্তাকার ত্রুটিগুলি দিতে পারে (উদাঃ )। আপনাকে গোল করার ত্রুটি দিতে পারে, তবে কেবল যখন আপনি এটি চেয়েছিলেন (যেমন শূন্যটি ফেরত দেয়)Decimal
0.01+0.01 != 0.02
Decimal
Math.Round(0.01+0.02)
double
যথাযথভাবে স্কেলিং এবং ডোমেন-নির্দিষ্ট রাউন্ডিং ব্যবহার করে এবং সাবধানতার সাথে প্রয়োগ করে তবে এটি পুরোপুরি সুনির্দিষ্ট হতে পারে। যদি কারও রাউন্ডিংয়ে opিপি হয় তবে decimal
ফলাফলগুলি ফল দিতে পারে যা শব্দার্থগতভাবে ভুল (উদাহরণস্বরূপ যদি কেউ একসাথে একাধিক মান যোগ করে যা নিকটতম পয়সাতে গোল বলে মনে হয় তবে বাস্তবে প্রথমে তাদের চারপাশে হয় না)। কেবলমাত্র ভাল জিনিসটি decimal
হল স্কেলিংটি অন্তর্নির্মিত।
দশমিকের একটি ছোট পরিসীমা রয়েছে, তবে আরও নির্ভুলতা রয়েছে - যাতে আপনি সময়ের সাথে সাথে এই সমস্ত পেনিস হারাবেন না!
এখানে সম্পূর্ণ বিবরণ:
অর্থের প্যাটার্নের সাথে একমত: যখন আপনি দশমিক ব্যবহার করেন তখন মুদ্রা পরিচালনা করা খুব জটিল umbers
আপনি যদি কোনও মুদ্রা-শ্রেণি তৈরি করেন, তবে আপনি সেখানে টস স্ট্রিং () - পদ্ধতি, পার্সিং মানগুলির আরও নিয়ন্ত্রণ এবং বিভাগের আরও ভাল নিয়ন্ত্রণ সহ অর্থের সাথে সম্পর্কিত সমস্ত যুক্তি রাখতে পারেন।
এছাড়াও, একটি কারেন্সি ক্লাসের সাথে অনিচ্ছাকৃতভাবে অন্যান্য ডেটার সাথে অর্থ মিশ্রণের কোনও সম্ভাবনা নেই।
আরেকটি বিকল্প (বিশেষত যদি আপনি নিজের শ্রেণীর মালিক হয়ে থাকেন) হ'ল কোনও আন্ত বা একটি ইন্টার 64৪ ব্যবহার করা এবং নিম্নোক্ত চারটি অঙ্ক (বা সম্ভবত এমনকি 2) "দশমিক পয়েন্টের ডান" হিসাবে মনোনীত করা। সুতরাং "কিনারায়" আপনার পথে কিছু "* 10000" এবং বেরোনোর পথে কিছু "* 10000" দরকার। এটি মাইক্রোসফ্টের এসকিউএল সার্ভার দ্বারা ব্যবহৃত স্টোরেজ মেকানিজম, দেখুন http://msdn.microsoft.com/en-au/library/ms179882.aspx
এর বিশেষত্ব হল আপনার সমস্ত যোগফল (দ্রুত) পূর্ণসংখ্যার গাণিতিক ব্যবহার করে করা যেতে পারে।
বেশিরভাগ অ্যাপ্লিকেশন আমি decimal
অর্থ উপস্থাপনের জন্য ব্যবহার করে কাজ করেছি । এটি এই ধারণার উপর ভিত্তি করে তৈরি করা হয় যে অ্যাপ্লিকেশনটি একাধিক মুদ্রার সাথে কখনই উদ্বিগ্ন হবে না।
এই অনুমানটি অন্য একটি অনুমানের ভিত্তিতে তৈরি হতে পারে, অ্যাপ্লিকেশনটি কখনই বিভিন্ন মুদ্রার সাথে অন্য দেশে ব্যবহার করা হবে না। আমি মামলাগুলি দেখেছি যেখানে এটি মিথ্যা প্রমাণিত হয়েছিল।
এখন এই অনুমানটি একটি নতুন উপায়ে চ্যালেঞ্জ করা হচ্ছে: বিটকয়েনের মতো নতুন মুদ্রাগুলি আরও সাধারণ হয়ে উঠছে, এবং সেগুলি কোনও দেশের ক্ষেত্রে সুনির্দিষ্ট নয়। এটি অবাস্তব নয় যে কেবলমাত্র একটি দেশে ব্যবহৃত একটি অ্যাপ্লিকেশনটির জন্য এখনও একাধিক মুদ্রাকে সমর্থন করার প্রয়োজন হতে পারে।
কিছু লোক বলবেন যে কেবল অর্থের জন্য কোনও প্রকার তৈরি করা বা ব্যবহার করা হ'ল "সোনার প্রলেপ দেওয়া" বা জানা প্রয়োজনীয়তার বাইরে অতিরিক্ত জটিলতা যুক্ত করা। আমি দৃ strongly়ভাবে একমত না। আপনার ডোমেনের মধ্যে একটি ধারণা যত বেশি সর্বব্যাপী, তত বেশি গুরুত্বপূর্ণ সঠিক বিমূর্ততাটি সামনে রেখে ব্যবহার করার জন্য যুক্তিসঙ্গত প্রচেষ্টা করা। আপনি যদি জটিলতা দেখতে চান তবে এমন একটি অ্যাপ্লিকেশনটিতে কাজ করার চেষ্টা করুন যা ব্যবহার করা হত decimal
এবং এখন Currency
প্রত্যেকের পাশে একটি অতিরিক্ত সম্পত্তি রয়েছেdecimal
সম্পত্তির সম্পত্তি রয়েছে।
আপনি যদি ভুল বিমূর্তিটি সামনের দিকে ব্যবহার করেন তবে পরে এটি প্রতিস্থাপন করা একশগুণ বেশি কাজ হবে be এর অর্থ বিদ্যমান কোডগুলিতে ত্রুটিগুলি সম্ভাব্যরূপে প্রবর্তন করা, এবং সর্বোত্তম অংশটি হ'ল এই ত্রুটিগুলি সম্ভবত পরিমাণে অর্থ, অর্থের সাথে লেনদেন বা অর্থের সাথে কেবল যে কোনও কিছু জড়িত।
এবং দশমিক ব্যতীত অন্য কিছু ব্যবহার করা এতটা কঠিন নয়। গুগল "নুগেট টাকার প্রকার" এবং আপনি দেখতে পাবেন যে অসংখ্য বিকাশকারী এ জাতীয় বিমূর্ততা তৈরি করেছেন (আমাকে সহ) এটি সহজ। এটি DateTime
একটিতে তারিখ সংরক্ষণের পরিবর্তে ব্যবহার করার মতোই সহজ string
।
আপনার নিজস্ব ক্লাস তৈরি করুন। এটি অদ্ভুত বলে মনে হচ্ছে, তবে একটি। নেট টাইপ বিভিন্ন মুদ্রা কভার করার জন্য অপর্যাপ্ত।