VBA 演算子Mod・¥を使用するときの注意 [VBA]
演算子Mod(剰余)、¥(商の整数部分)を使用する場合、他の演算子では起きない現象が起きるので、注意が必要です。
上図画面の例をご参照下さい。
1つ目の計算式、
? 2147483647 \ 3
では、正しく計算結果が表示されています。
2つ目の計算式、
? 2147483648 \ 3
を入力して、Enterを押したら、図の右の「オーバーフローしました。」のエラーが表示されました。
すでにお気づきでしょうが、「2147483647」は、長整数型の上限値です。
演算子Mod(剰余)、¥(商の整数部分)は、長整数型の範囲でしか使用することができません。
下図のように、通貨型変数を利用して計算を行っても、結果は同じです。
(通貨型変数の上限値は、922,337,203,685,477.5807)
Modの行で、図のオーバーフローが発生します。
どうやらこれらの処理は、内部処理が長整数型で行われているようで、その範囲を超える値が計算式に指定されると、オーバーフローになってしまうようです。
通常の四則演算ではこのようなことにはならないので、長整数型の範囲を超える場合は、自前で計算式を書く必要があります。
便利な演算子なのですが、長整数型を超える値を扱うことは良くあると思うので、使わないようにしたほうが無難かと思います。
追記
VB.NETは大丈夫です。(32bitを超える数値も正しく計算されます)
2013-01-11 23:32
nice!(0)
コメント(0)
トラックバック(0)
コメント 0