C#控制台应用程序,如何计算任何持续时间的移动账单?

时间:2014-09-28 17:01:21

标签: c# algorithm datetime billing

让我们说我们的移动电话有两个结算周期,如果我们在0-12之间拨打电话,那么通话费率是1美元/分钟&如果我们在12-24之间打电话,那么费率是2美元/分钟。通话可以随时开始。持续任何时间。我需要计算通话时间的账单。我很难使用datetime类型。我还需要一个更好的算法来计算账单。我正在尝试这样的事情:

DateTime StartTime, EndTime;
        decimal Bill = 0;
        decimal RemainingDuration;


        StartTime = DateTime.Now;

        EndTime = DateTime.Now.AddHours(2.5);

        var Duration = (EndTime.ToString("H:mm") - StartTime.ToString("H:mm"));

        if (StartTime.Hour > 0 && StartTime.Hour < 12)
        {
            //var RemainingTime = 12.00 - StartTime;
            //if (Duration < RemainingTime)
            //{
            //    Bill = (Duration * 60) * 1;
            //    Console.WriteLine(Bill);
            //}
            //else
            //{
            //    RemainingDuration = Duration - RemainingTime;
            //    Bill = ((RemainingTime * 60) * 1) + ((RemainingDuration * 60) * 2);
            //    Console.WriteLine(Bill);
            //}

        }
        else if (StartTime.Hour > 12 && StartTime.Hour < 24)
        {
            //var RemainingTime = 24.00 - StartTime.Hour;

            //if (Duration < RemainingTime)
            //{
            //    Bill = (Duration * 60) * 2;
            //    Console.WriteLine(Bill);
            //}
            //else
            //{
            //    RemainingDuration = Duration - RemainingTime;
            //    Bill = ((RemainingTime * 60) * 2) + ((RemainingDuration * 60) * 1);
            //    Console.WriteLine(Bill);
            //}
        }
        Console.ReadLine();

类型未命中匹配存在一些错误。错误不是我最关心的问题,我写这段代码假设通话时间最长可达24小时。我需要无限期地写它。也很难转换类型。代码示例确实会有所帮助。感谢

1 个答案:

答案 0 :(得分:1)

由于您在尝试对它们进行算术运算之前将DateTime转换为字符串,因此导致类型不匹配。至于算法,当然有很多种方法可以做到,但这里有一个简单的例子可以解决你的24小时问题,也许会给你更多的想法。

decimal bill = 0;            

DateTime startTime = DateTime.Now;
DateTime endTime = DateTime.Now.AddHours(2.5);
DateTime timeNow = startTime;

while (timeNow <= endTime)
{                
    decimal rate = (timeNow.Hour >= 12 && timeNow.Hour <= 24) ? 2 : 1;                
    bill = bill + rate;
    Console.WriteLine("{0:HH:mm}, rate: ${1:#,0.00}, bill: ${2:#,0.00}", timeNow, rate, bill);
    timeNow = timeNow.AddMinutes(1);
}

Console.WriteLine("Bill: {0:HH:mm} to {1:HH:mm}, {2:#,0} mins, ${3:#,0.00}", startTime, endTime, (endTime - startTime).TotalMinutes, bill);

Console.ReadLine();