我无法理解此错误:算术运算导致溢出。 (添加整数)
在该调用方法SetVolume,卷 = 2055786000和大小 = 93552000.体积是一个整数属性,尺寸也整数,如你可以看到。
类是部分类DBML实体类的,但是这卷属性不是在数据库中的列,只在部分类存在,作为“业务对象属性”。
详细介绍所示:
数据>物品:为了评估索引属性,该属性必须是合格的,所述参数必须由用户显式提供。
什么可能导致此...?
我无法理解此错误:算术运算导致溢出。 (添加整数)
在该调用方法SetVolume,卷 = 2055786000和大小 = 93552000.体积是一个整数属性,尺寸也整数,如你可以看到。
类是部分类DBML实体类的,但是这卷属性不是在数据库中的列,只在部分类存在,作为“业务对象属性”。
详细介绍所示:
数据>物品:为了评估索引属性,该属性必须是合格的,所述参数必须由用户显式提供。
什么可能导致此...?
的整数的最大值(这是有符号的)是2147483647
。如果该值溢出,则抛出异常以防止程序意外行为。
如果不会抛出此异常,那么对于您的Volume
,您的值为-2145629296
,这可能不是您想要的。
解决方案:为您的音量使用一个Int64
。最大值为9223372036854775807
,您可能更安全一些。
int.MaxValue = 2147483647
2055786000 + 93552000 = 2149338000 > int.MaxValue
所以你不能这个数字存储到一个整数。您可以使用Int64类型,其最大值为9,223,372,036,854,775,807
。
FO INT最大值为2147483647,所以2055786000 + 93552000> 2147483647和它引起的溢出
结果的整数值是外面的整数数据类型可以容纳的范围之外。
尝试使用的Int64
2055786000 + 93552000 = 2149338000,其大于2^31。因此,如果您使用4字节编码的有符号整数,则操作的结果不适合,并且会出现溢出异常。
为int的最大大小为2147483647。你可以使用一个Int64 /长,这要大得多。
为了简单起见,我将使用字节:
byte a=250;
byte b=8;
byte c=a+b;
如果A,B,和C“廉政”,你所期望的258,但在“字节”的情况下,预期的结果将是2 (258 & 0xFF的),但在Windows应用程序,你会得到一个异常,在控制台一个你可能不会(我不知道,但这可能取决于IDE,我用SharpDevelop的)。
然而,有时,这种行为需要(例如,您只关心结果的低8个比特)。
你可以做到以下几点:
byte a=250;
byte b=8;
byte c=(byte)((int)a + (int)b);
这样两个“A”和“B”转换为“INT”,接着,添加转换回“字节”。
为了安全起见,你也可以试试:
...
byte c=(byte)(((int)a + (int)b) & 0xFF);
或者,如果你真的想要这种行为,以上做的更简单的方法是:
unchecked
{
byte a=250;
byte b=8;
byte c=a+b;
}
或者首先声明你的变量,然后在'unchecked'部分做数学运算。
或者,如果您想强制检查溢出,请使用'checked'代替。
希望这可以解决问题。
Nurchi
P.S.
信任我,该异常是你的朋友:)
时,这个值是通过零返回-1。#IND由于分工发生这个错误我。在C++ IEEE浮点异常 更多信息here on SO和by John Cook
对于一个谁也downvoted这个答案(并没有说明具体原因),为什么这个答案可以在一定显著的原因是,除以零会导致一个无限大的数字,因此这个值不适合Int32(甚至Int64)。 所以你收到的错误将会是相同的(算术运算导致溢出),但原因稍有不同。
请指出为什么这个答案得到了downvote – 2014-10-15 10:09:27
当我遇到此错误时,我正在创建前10,000个自然数的总和。我为summation变量使用Int32数据类型。当我将其更改为Int64时,问题就解决了。谢谢。它帮助! – RBT 2016-03-30 12:31:16