2014-09-28 3 views
-1

Допустим, у нас есть два периода оплаты для нашего мобильного звонка, если мы звоним между 0-12, тогда скорость звонка составляет 1 $/мин. &, если мы звоним между 12-24, тогда ставка составляет 2 $/мин. Вызов может начинаться в любое время & длится любой продолжительностью. Мне нужно рассчитать счет за продолжительность звонка. Мне сложно работать с типом datetime. Также мне нужен лучший алгоритм для расчета счета. Я пробую что-то вроде этого:C# Консольное приложение, как рассчитать Mobile Bill на любой срок?

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(); 

Есть ошибки при совпадении типа miss. ошибки здесь не являются моей главной задачей, я написал этот код, предполагая, что продолжительность звонка может быть не более 24 часов. Мне нужно написать его неограниченно. Также получение трудного времени для преобразования типов. Образец кода действительно поможет. спасибо

+2

** Прочитать сообщение об ошибке **. – SLaks

+0

Вы не можете использовать var – deKajoo

+0

Как вы думаете, это означает вычесть две строки. – SLaks

ответ

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(); 
+0

Спасибо, очень хорошо написано. Я постараюсь продлить его на неограниченный срок. Я правильно оцениваю ваш ответ. –