当前位置:  开发笔记 > 编程语言 > 正文

寻找一个总结数字而不是溢出的.NET函数只返回int.MaxValue

如何解决《寻找一个总结数字而不是溢出的.NET函数只返回int.MaxValue》经验,为你挑选了1个好方法。

我使用int.MaxValue作为惩罚,有时候我会一起计算惩罚.是否有功能或如何创建具有最大优势和效率的功能.

即.

50 + 100 = 150

int.Max + 50 = int.Max而不是int.Min + 50



1> Ben Griswold..:

这个答案......

int penaltySum(int a, int b)
{
    return (int.MaxValue - a < b) ? int.MaxValue : a + b;
}

未通过以下测试:

[TestMethod]
public void PenaltySumTest()
{
    int x = -200000; 
    int y = 200000; 
    int z = 0;

    Assert.AreEqual(z, penaltySum(x, y));
}

我建议实现penaltySum()如下:

private int penaltySum(int x, int y, int max)
{
    long result = (long) x + y;
    return result > max ? max : (int) result;
}

请注意,我传递了最大值,但如果您愿意,可以在int.MaxValue中进行硬编码.

或者,您可以强制执行算术运算溢出检查并执行以下操作:

private int penaltySum(int x, int y, int max)
{
   int result = int.MaxValue;

   checked
   {
       try
       {
           result = x + y;
       }
       catch
       {
           // Arithmetic operation resulted in an overflow.
       }
   }

   return result;

}

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有