【问题标题】:Convert negative .days to 0?将负 .days 转换为 0?
【发布时间】:2013-07-06 06:36:16
【问题描述】:

我正在尝试将“合同”的“结束日期”与 datetime.now 进行比较。显然,如果今天的日期超过合同结束日期,则该值将返回为负数。我希望一个负值返回为 0,而任何已经发生的结束日期都将返回为正值。

目前,正值正常工作,但负值返回为:

-41641

用于计算值的代码如下:

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

contractDaysRemaining 随后在代码中返回该值。

我是 C# 的新手,想知道如何将负的 contractDaysRemaining 转换为 0,同时保持正值不变。

提前致谢!

【问题讨论】:

    标签: c# datetime negative-number


    【解决方案1】:

    为此,您需要使用Math.Max()

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

    Max() 返回两个值中较大的一个,所以如果你给它0 作为其中之一,它只会影响负数。

    我强烈建议您同时查看Math class 中的其他方法,因为那里有很多有用的方法。例如Round()

    【讨论】:

    • 这行得通。十分感谢你分享这些信息。我一定会进一步检查数学课,谢谢!
    • @Gerald - 很高兴它对您有所帮助,祝您的 C# 体验好运!
    【解决方案2】:

    类似这样的:

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

    【讨论】:

      【解决方案3】:
      var contractDaysRemaining = Math.Max(ts.Days, 0);
      

      取最大值或零。你也可以这样做:

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

      不太清楚。

      【讨论】:

      • math.max 方法是我选择使用的。效果很好,谢谢
      【解决方案4】:
      var contractDaysRemaining = ts.Days > 0 ? ts.Days : 0;
      

      【讨论】:

        【解决方案5】:
        if(contractDaysRemaining < 0)
            contractDaysRemaining = 0
        

        只需在末尾添加该行

        【讨论】:

          猜你喜欢
          • 2022-12-17
          • 1970-01-01
          • 2015-07-01
          • 2021-06-02
          • 2019-01-11
          • 2011-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多