我无法理解这个错误:
在对方法SetVolume的调用中,卷 = 2055786000且大小 = 93552000.Volume是Integer属性,size也是Integer,如您所见。
该类是dbml实体类的部分类,但是此Volume属性不是数据库中的列,它仅作为“业务对象属性”存在于部分类中。
查看详细信息显示:
数据>项目:为了评估索引属性,必须对该属性进行限定,并且必须由用户显式提供参数。
可能导致这种情况......?
答案 0 :(得分:34)
整数(有符号)的最大值为2147483647
。如果该值溢出,则抛出异常以防止程序出现意外行为。
如果不会抛出该异常,则-2145629296
的值为Volume
,这很可能是不需要的。
解决方案:为您的音量使用Int64
。最大值为9223372036854775807
,您可能更安全。
答案 1 :(得分:7)
int.MaxValue = 2147483647
2055786000 + 93552000 = 2149338000 > int.MaxValue
因此您无法将此数字存储为整数。您可以使用Int64类型,其最大值为9,223,372,036,854,775,807
。
答案 2 :(得分:3)
为简单起见,我将使用字节:
byte a=250;
byte b=8;
byte c=a+b;
如果a,b和c是'int',你会期望258,但是在'byte'的情况下,预期结果将是2(258& 0xFF),但是在Windows应用程序中你得到一个例外,在控制台你可能没有(我没有,但这可能取决于IDE,我使用SharpDevelop)。
但是,有时需要这种行为(例如,您只关心结果的低8位)。
您可以执行以下操作:
byte a=250;
byte b=8;
byte c=(byte)((int)a + (int)b);
这样,'a'和'b'都会转换为'int',添加,然后再转换回'byte'。
为了安全起见,您可能还想尝试:
...
byte c=(byte)(((int)a + (int)b) & 0xFF);
或者,如果你真的想要这种行为,那么更简单的做法是:
unchecked
{
byte a=250;
byte b=8;
byte c=a+b;
}
首先声明你的变量,然后在'未选中'部分进行数学计算。
或者,如果要强制检查溢出,请改为使用“已检查”。
希望这可以解决问题。
Nurchi
P.S。
相信我,那个例外是你的朋友:)
答案 3 :(得分:2)
结果整数值超出整数数据类型可以容纳的范围。
尝试使用Int64
答案 4 :(得分:1)
最大值fo int是2147483647,所以2055786000 + 93552000> 2147483647它导致溢出
答案 5 :(得分:0)
2055786000 + 93552000 = 2149338000,大于2 ^ 31。因此,如果您使用以4个字节编码的有符号整数,则操作的结果不适合,并且您会收到溢出异常。
答案 6 :(得分:0)
int的最大大小是2147483647.你可以使用更大的Int64 / Long。
答案 7 :(得分:0)
当一个值返回-1时,我发生了这个错误。#IND由于除以零而发生。 有关C ++中here on SO和by John Cook
的IEEE浮点异常的更多信息对于那个对这个答案进行了贬低(并没有说明原因)的人来说,这个答案对某些人来说意义重大的原因是,除以零将导致无限大的数字,从而得到一个没有&#39的值。 ; t适合Int32(甚至Int64)。 因此,您收到的错误将是相同的(算术运算导致溢出),但原因略有不同。