Преобразовать отрицательные .days в 0?

Я пытаюсь сравнить «дату окончания» «контракта» с datetime.now. Очевидно, что если сегодняшняя дата превышает дату окончания контракта, значение возвращается как отрицательное. Я хочу, чтобы отрицательное значение возвращалось как 0, в то время как любая конечная дата, которая уже произошла, будет возвращаться как положительное значение.

В настоящее время положительное значение работает правильно, однако отрицательные значения возвращаются как:

-41641

Код, используемый для расчета значения, выглядит следующим образом:

var contractEndDate = contract.EndDate;
var ts = contractEndDate.Value.Subtract(DateTime.Now);
var contractDaysRemaining = ts.Days;

ContractDaysRemaining затем возвращает значение позже в коде.

Я новичок в С# и хотел бы знать, как преобразовать отрицательное значение contractDaysRemaining в 0, оставив положительное значение нетронутым.

Заранее спасибо!


person Ger    schedule 08.07.2013    source источник


Ответы (4)


Для этого вы хотите использовать Math.Max().

var contractDaysRemaining = Math.Max(ts.Days, 0);

Max() возвращает большее из двух значений, поэтому, если вы укажете ему 0 в качестве одного из них, это повлияет только на отрицательные числа.

Я настоятельно рекомендую рассмотреть другие методы класса Math. ну, так как там много полезного. Round(), например.

person Bobson    schedule 08.07.2013
comment
это сработало. Спасибо Вам большое за информацию. Обязательно зайду еще на урок математики, спасибо! - person Ger; 09.07.2013
comment
@Gerald - я рад, что это помогло, и удачи вам в изучении C#! - person Bobson; 09.07.2013

Что-то вроде этого:

var contractDaysRemaining = ts.Days < 0 ? 0 : ts.Days;
person Grant H.    schedule 08.07.2013

var contractDaysRemaining = Math.Max(ts.Days, 0);

Он принимает максимальное значение или ноль. Вы также можете сделать:

var contractDaysRemaining = ts.Days < 0 ? 0 : ts.Days;

Не совсем так ясно.

person Community    schedule 08.07.2013
comment
метод math.max был тем, что я решил использовать. это сработало хорошо, спасибо - person Ger; 09.07.2013

if(contractDaysRemaining < 0)
    contractDaysRemaining = 0

просто добавьте эту строку в конце

person Jonesopolis    schedule 08.07.2013