কিভাবে এক 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;
( M
123.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;
ওভারফ্লো ব্যতিক্রমগুলি পরিচালনা করতে যদি আপনি বিরক্ত না করতে চান এবং উপরের পদ্ধতিটি কাজ করে এবং যদি এরকম কিছু ঘটে থাকে তবে আপনি সর্বাধিক সম্ভাব্য মান (আমার ক্ষেত্রে) রাখতে চান, তবে আমি সচেতন যে অন্যান্য অনেক পরিস্থিতিতে এটি প্রত্যাশিত আচরণ হবে না এবং ব্যতিক্রম হ্যান্ডলিংয়ের প্রয়োজন হতে পারে।