C# Int不能保存Int.MaxValue的值
我有以下两种方法:C# Int不能保存Int.MaxValue的值,c#,C#,我有以下两种方法: public int Average (params int[] array) { if (array.Length > 0) { double avg = Sum(ints) / arr.Length; return (int)avg; } return 0; } public int Sum(params int[] array2) {
public int Average (params int[] array)
{
if (array.Length > 0)
{
double avg = Sum(ints) / arr.Length;
return (int)avg;
}
return 0;
}
public int Sum(params int[] array2)
{
int total = 0;
for (int n = 0; n < array2.Length; n++)
{
total += arr[n];
}
return total;
}
public int Average(params int[]数组)
{
如果(array.Length>0)
{
双平均=总和(整数)/阵列长度;
返回(int)平均值;
}
返回0;
}
公共整数和(参数int[]array2)
{
int-total=0;
for(int n=0;n
但出于测试目的,我尝试在数组中添加int.MaxValue/2
和int.MaxValue/2+4.
。但是为什么单元测试失败了,尽管两个值的总和将小于int.MaxValue
数组[]中有两个值:-int.MaxValue/2&int.MaxValue/2+4。。但是当我运行单元测试时,它失败了,尽管两个值的总和将小于int.maxvalues
不,先生,总和将超过int.MaxValue
:
(int.MaxValue / 2) + (int.MaxValue / 2 + 4) == int.MaxValue + 4 //...
您溢出了int max值
简单的数学:(x/2)+(x/2+4)=x+4在调试器中仔细检查,看看您的期望与实际情况的偏差。我发现
int
无法容纳int.MaxValue
的结论很奇怪int.MaxValue
是一个int
类型的常量,那么它是如何工作的呢?另外,有一个不可能且错误的最大值有什么意义呢?作为旁注:double avg=Sum(ints)/arr.Length
不会像您预期的那样工作。它除以两个整数。例如,如果Sum(整数)==3
和arr.Length==2
那么avg
将是1
而不是1.5
。旁注2:Linq内置了函数Sum
和Average
,它们已经满足了您的要求。这里的挑剔:int.MaxValue
是一个奇数,所以int.MaxValue/2*2!=int.MaxValue
!不过,你答案的核心是正确的+1.