掛け算について不思議な事があります
以下のような掛け算をした場合オーバーフローエラーと
なってしまいます。
・ Msgbox (1000 * 1000)
これを、
・ Msgbox Cint(1000) * Cint(1000)
とするとオーバーフローじゃなくなります。
自分で色々調べてみたのですが、なぜなのかわかりません。
取りあえず、2つめの方法でプログラム上は解決してるのですが
なぜなのか気になってしょうがありません。
原因をご存知の方がいましたら教えていただきたく思います。
自己レスです。
すいません
先程の内容が間違っていたので訂正させて頂きます
誤)Msgbox Cint(1000) * Cint(1000)
正)Msgbox CDbl(1000) * CDbl(1000)
ヘルプは見ましたか?
数値計算で数値が内部的に整数型として処理されている場合に、計算結果が整数型の範囲を超えています。
と書かれています。
Integer × Integer の時、内部的にはIntegerとして処理されます。
Integerの範囲は -32768 〜 32767、計算結果は1000000なので
Integerの範囲を超えている為、オーバーフローとなります。
CDblでDoubleとして扱えば範囲内に収まるのでオーバーフローしません。
別にDoubleじゃなくても、Long型でも範囲内に収まるのでオーバーフローしません。
nanashi様 ご回答ありがとうございます
ヘルプはもちろん見ました。
>数値計算で数値が内部的に整数型として処理されている場合に、計算結果が整数型>の範囲を超えています。
しかし、上記のようなヘルプをみつけることが出来ませんでした。
初心者質問でお恥ずかしい限りです。。。
VBは、数字をそのまま書くとintegerとして扱われるんですね、
知りませんでした。(汗
親切なご回答ほんとにありがとうございました
> VBは、数字をそのまま書くとintegerとして扱われるんですね、
常に Integer になるわけではなく、表記にあわせて、
12345 → Integer
12345678 → Long
123.456 → Double
などのように判定されます。
これらは、TypeName(12345678) などで確認できます。
なお、型を明示したい場合は、
123% → Integer
123& → Long
123! → Sinble
123# → Double
123@ → Currency
といった記法もあります。
ツイート | ![]() |