ডকুমেন্টেশন অনুসারে, decimal.Round
পদ্ধতিটি একটি বৃত্তাকার থেকে সম-অ্যালগরিদম ব্যবহার করে যা বেশিরভাগ অ্যাপ্লিকেশনগুলির জন্য সাধারণ নয়। তাই আরও বেশি প্রাকৃতিক রাউন্ড হাফ-আপ অ্যালগরিদম করার জন্য আমি সবসময় একটি কাস্টম ফাংশন লিখে শেষ করি:
public static decimal RoundHalfUp(this decimal d, int decimals)
{
if (decimals < 0)
{
throw new ArgumentException("The decimals must be non-negative",
"decimals");
}
decimal multiplier = (decimal)Math.Pow(10, decimals);
decimal number = d * multiplier;
if (decimal.Truncate(number) < number)
{
number += 0.5m;
}
return decimal.Round(number) / multiplier;
}
এই কাঠামো ডিজাইনের সিদ্ধান্তের পিছনে কারণ কি কেউ জানেন?
রাউন্ড হাফ-আপ অ্যালগরিদমের কাঠামোর মধ্যে কোনও অন্তর্নির্মিত প্রয়োগ আছে? অথবা হয়ত কিছু ব্যবস্থাপনিত উইন্ডোজ এপিআই?
এটি শুরুর জন্য বিভ্রান্তিকর হতে পারে যা কেবল decimal.Round(2.5m, 0)
ফলস্বরূপ 3 প্রত্যাশার সাথে লিখলে পরিবর্তে 2 পেয়ে যায়।