কিভাবে এক Cast হল একটি করে doubleকরতে decimalযা মুদ্রা উন্নয়ন করছেন ব্যবহার করা হয়। কোথায় Mযায়?
decimal dtot = (decimal)(doubleTotal);
উত্তর:
আপনি কেবলমাত্র Mএকটি সংখ্যাসূচক আক্ষরিক জন্য ব্যবহার করেন , যখন আপনি এটি ঠিক কাস্ট করেন:
decimal dtot = (decimal)doubleTotal;
নোট করুন যে একটি ভাসমান পয়েন্ট নম্বর সঠিক মান রাখতে উপযুক্ত নয়, সুতরাং আপনি যদি প্রথমে সংখ্যার যোগ করেন এবং তারপরে রূপান্তর করেন তবে Decimalরাউন্ডিং ত্রুটি হতে পারে। আপনি সংখ্যাগুলি Decimalএকসাথে যুক্ত করার আগে রূপান্তর করতে চাইতে পারেন , বা নিশ্চিত করুন যে সংখ্যাগুলি প্রথম স্থানে ভাসমান পয়েন্ট সংখ্যা নয়।
Mআক্ষরিক প্রত্যয় প্রয়োজন না করে আপনি এই জাতীয় দশমিক দ্বিগুণ করতে পারেন :
double dbl = 1.2345D;
decimal dec = (decimal) dbl;
Mএকটি নতুন আক্ষরিক দশমিক মান ঘোষণার সময় আপনার ব্যবহার করা উচিত :
decimal dec = 123.45M;
( M123.45 ব্যতীত ডাবল হিসাবে বিবেচিত হবে এবং এটি সংকলন করবে না))
ডিফল্ট রূপান্তর শ্রেণি ব্যবহার করুন: Convert.ToDecimal(Double)
Convert.ToDecimal(the double you are trying to convert);
doubleকরতে decimalদেওয়া যে একটি জন্য double(1000000.0 / 3.0) মত মান এক would কিছু ক্ষেত্রে "অতিরিক্ত" নির্ভুলতা 333333.33333333333D ফলন ক্লিপ করতে চান, তবে অন্য ক্ষেত্রে 333333.333333333313931D উপার্জন করে কেউ এটি ধরে রাখতে চান। কেবল "দশমিক রূপান্তরিত করুন" বলার পরিবর্তে কোডটিতে কীভাবে সেই রূপান্তরটি সম্পাদন করা উচিত তা নির্দিষ্ট করা উচিত।
Convert.ToDecimal(double)একই রকম (decimal)doubleTotal, doubleTotalআপনি যদি একটি অন্য ধরণের পরিবর্তিত হয়ে থাকেন তবে আপনি সম্ভবত একটি সংকলন-সময় ত্রুটি এড়াতে এবং একটি হার্ড-টু- সন্ধানে রান-টাইম ত্রুটি পরিচয় করিয়ে দিতে পারেন কারণ একটি আলাদা টোডিসিমাল ওভাররাইড কল হতে পারে। কাস্ট অপারেটর আরও স্পষ্টত ...
ভাল এটি একটি পুরানো প্রশ্ন এবং আমি এখানে দেখানো কিছু উত্তর ব্যবহার করেছি। তা সত্ত্বেও, আমার বিশেষ দৃশ্যকল্প ইন এটা সম্ভব ছিল doubleমান যে, আমি রূপান্তর চেয়েছিলেন decimalপ্রায়ই চেয়ে বড় ছিল decimal.MaxValue। সুতরাং, ব্যতিক্রমগুলি পরিচালনা করার পরিবর্তে আমি এই এক্সটেনশন পদ্ধতিটি লিখেছিলাম:
public static decimal ToDecimal(this double @double) =>
@double > (double) decimal.MaxValue ? decimal.MaxValue : (decimal) @double;
ওভারফ্লো ব্যতিক্রমগুলি পরিচালনা করতে যদি আপনি বিরক্ত না করতে চান এবং উপরের পদ্ধতিটি কাজ করে এবং যদি এরকম কিছু ঘটে থাকে তবে আপনি সর্বাধিক সম্ভাব্য মান (আমার ক্ষেত্রে) রাখতে চান, তবে আমি সচেতন যে অন্যান্য অনেক পরিস্থিতিতে এটি প্রত্যাশিত আচরণ হবে না এবং ব্যতিক্রম হ্যান্ডলিংয়ের প্রয়োজন হতে পারে।