よろしくお願い致します。
フォームにラベル又はテキストボックスを貼り付けて、
フォームロード時に、
Dim a As Long
a = (999- 350) * 740
Label1.Caption = a
という命令文を書きました。
aの値が整数型の範囲でなら、きちんと表示されるのですが、
整数型の限界32,767以上の答えになる式を入れて、実行すると、
オーバーフローしてしまいます。
aはLong型で宣言しているのに、なぜ表示されないのでしょうか?
計算がIntegerで行われるからです。
a = (999&- 350&) * 740&
としてみてください。
> a = (999- 350) * 740
ヘルプで、各演算子の記述を見直しみてください。
一部の例外はありますが、基本的に算術演算の結果は、
「2つの数値のうち、より高い精度を持つデータ型」となります。
つまり、Integer同士を計算した場合、たとえ結果がLongの範囲であっても、
その結果は Integer型として扱われる事になります。そのため、
> 整数型の限界32,767以上の答えになる式を入れて、実行すると、
> オーバーフローしてしまいます。
という現象が発生する事になります。
これを回避するには、CLng等の型変換関数(CCurやCLngなど)を用いるか、
型宣言文字(@や&など)を利用するなどして、各数値を
より高いデータ型にしておいてから計算させる必要があります。
まだまだ勉強不足です。
&をつけてやってみたら、きちんと動きました。
答えをいれる変数がLONGなだけではダメなんですね。
とっても勉強になりました。
ありがとうございました。
ツイート | ![]() |