星期四, 5月 21, 2026

[C#] Math.DivRem

以商業邏輯出貨包裝數量為例子來記錄不同計算寫法
namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int 總出貨數量 = 24;
            int 預計包裝數量 = 5;

            // 傳統寫法一:/ 搭配 %
            int 實際包裝數量_1 = 總出貨數量 / 預計包裝數量;
            int 剩餘數量_1 = 總出貨數量 % 預計包裝數量;

            if (剩餘數量_1 > 0)
                實際包裝數量_1++;

            // 傳統寫法二:Math.Ceiling 無條件進位
            int 實際包裝數量2 = (int)Math.Ceiling((double)總出貨數量 / 預計包裝數量);

            // .NET Framework:透過 out 回傳剩餘數量
            int 實際包裝數量_3 = Math.DivRem(總出貨數量, 預計包裝數量, out int 剩餘數量_3);
            if (剩餘數量_3 > 0)
                實際包裝數量_3++;

            // .NET 6 新增:使用 Tuple 回傳
            var (實際包裝數量_4, 剩餘數量_4) = Math.DivRem(總出貨數量, 預計包裝數量);
            if (剩餘數量_4 > 0)
                實際包裝數量_4++;

            Console.WriteLine($"/ 搭配 %: {實際包裝數量_1}");
            Console.WriteLine($"Math.Ceiling 無條件進位: {實際包裝數量2}");
            Console.WriteLine($"透過 out 回傳剩餘數量: {實際包裝數量_3}");
            Console.WriteLine($"使用 Tuple 回傳: {實際包裝數量_4}");
        }
    }
}

沒有留言:

張貼留言