這是譯自VBnet的一篇FAQ,以前我也曾回答過這樣的問題,因此公開於此以飨大家.
問:誰能告訴我一下代碼為何產生溢出錯誤?我已經把結果正確地聲明為Long了.
DimxasLongx=33*1000'產生溢出錯誤
...然而當我直接賦值x=330000時,就正常運行沒有錯誤.
答:在計算賦給X的值時,VB會使用一個臨時變量.在此過程中,它使用的是一個與表達式中數據類型相同的臨時變量.在上面的例子中,由於相乘的兩個數都為整型(Integer),VB將使用一個整型的臨時變量.當乘積超過32K(整型的極限)時,就會產生溢出錯誤.修正的方法是給表達式中的某個值指定一個類型標識符,強制VB使用一個足以容納計算結果的臨時變量.如:
x=33*1000&
盡管1000不是Long型數,但VB將使用一個Long型臨時變量來保存結果.然而,還要注意這段代碼:
x=33*1000*100&
由於VB試圖將表達式前一部分的積賦給一整型臨時變量,將仍然會發生溢出錯誤,盡管在表達式中已經聲明了一個Long型數.修正的方法是把最大的數聲明為Long或者是把VB將計算為Long型的數用括號括起來:
x=33*1000&*100
x=33*(1000*100&)->