ตามเอกสารอธิบาย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;
}
ไม่มีใครรู้เหตุผลที่อยู่เบื้องหลังการตัดสินใจออกแบบกรอบงานนี้
มีการใช้งานอัลกอริธึมแบบครึ่งรอบในตัวหรือไม่? หรืออาจมี Windows API ที่ไม่มีการจัดการบ้าง
มันอาจทำให้เข้าใจผิดสำหรับผู้เริ่มต้นที่เพียงเขียนdecimal.Round(2.5m, 0)
คาดหวัง 3 เป็นผล แต่รับ 2 แทน