我不明白这个错误:

在此呼叫方法setVolume中, 体积 = 2055786000和 尺寸 =93552000。卷是一个整数属性,如您所见,大小也是整数。

该类是DBML实体类的部分类,但是该卷属性不是数据库中的列,它仅存在部分类中,作为“业务对象属性”。

查看详细 显示:

数据>项目 :为了评估索引属性,必须符合资格,并且必须由用户明确提供参数。

alt text

什么可能导致这个...?

有帮助吗?

解决方案

整数的最大值(已签名)是 2147483647. 。如果该值溢出,则会引发异常以防止程序的意外行为。

如果不抛出这个例外,您将有一个值 -2145629296 为您 Volume, ,这很可能不想要。

解决方案:使用 Int64 为您的音量。最大值 9223372036854775807, ,您可能会更安全的一面。

其他提示

int.MaxValue = 2147483647
2055786000 + 93552000 = 2149338000 > int.MaxValue

因此,您不能将此数字存储到整数中。您可以使用 INT64 类型具有最大值 9,223,372,036,854,775,807.

为简单起见,我将使用字节:

byte a=250;
byte b=8;
byte c=a+b;

如果a,b和c是'int',则您会期望258,但在“字节”的情况下,预期的结果为2(258&0xff),但是在Windows应用程序中,您会在A中获得例外控制台,您可能不会(我不这样做,但这可能取决于IDE,我使用Sharp Develop)。

但是,有时需要这种行为(例如,您只关心结果的下部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;
}

或首先声明您的变量,然后在“未检查”部分中进行数学。

或者,如果要强制对溢出进行检查,请改用“检查”。

希望这能清除一切。

Nurchi

PS

相信我,你的朋友是这个例外:)

结果整数值超出了整数数据类型可以保持的范围。

尝试使用INT64

最大值fo ins是2147483647,因此2055786000+93552000> 2147483647及其引起溢出

2055786000 + 93552000 = 2149338000,大于2^31。因此,如果您使用在4个字节上编码的签名整数,则操作的结果不合适,并且会得到溢出异常。

INT的最大尺寸为2147483647。您可以使用更大的int64/long。

当一个值返回为-1。#IND由于分区为零时,我发生了这个错误。有关C ++中IEEE浮点异常的更多信息 在这里约翰·库克(John Cook)

对于那些已经投入了这个答案的人(并且没有说明原因),为什么这个答案对某些人来说很重要的是,零的划分将导致一个无限的数字,因此值不适合一个值INT32(甚至INT64)。因此,您收到的错误将是相同的(算术操作导致溢出),但原因略有不同。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top