以下のコードでは変数i1とi2の乗算を行っています。
計算の結果がInteger型の範囲に収まらないのは分かっているので、
結果を収める変数をLong型にしましたがオーバーフローが発生します。
オーバーフローを起こさないためには計算に使用する最初の変数i1をLong型にキャストします。
Dim i1 As Integer = 12345678 Dim i2 As Integer = 123456 Dim lResult As Long 'オーバーフローが起きる lResult = i1 * i2 'オーバーフローが起きる lResult = Clng(i1 * i2) 'オーバーフローは起きない lResult = Clng(i1) * i2
VisualBasicはコンパイル時に、最初の計算に使用する値の型から結果をInteger型と仮定します。
変数i1と変数i2の乗算の結果をIntgerと仮定し、式の結果がIntgerの範囲に収まらないためオーバーフローします。
コンパイル時に結果をLong型と仮定するためには、式の最初の変数i1をLong型にキャストします。
常識らしいです・・・知らなかった・・・(;・∀・)
0 件のコメント:
コメントを投稿