我無法理解此錯誤:算術運算導致溢出。 (添加整數)
在該調用方法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