2016年4月28日木曜日

NET(VB) VBでは0除算例外が出ない

VBでは0除算例外(DivideByZeroException)が出ないなんて
ずっとVBやってたきたけど知らなかったよ。
しばらくC#やってたから忘れたのかナ…

詳しくはコチラhttp://salvw.miscnotes.com/index.php/archives/1282


Dim i1 As Integer = 1
Dim i2 As Integer = 0

結果を格納する変数の型がDoubleなら落ちない。
Dim ret1 As Double = i1 / i2

結果を格納する変数の型がDoubleでないと落ちる。
Dim ret2 As Integer = i1 / i2

・i1とi2がDoubleにキャストされて、除算が行われる。CDbl(i1) / CDbl(i1)
・除算の結果は正の無限大または負の無限大になる。
・結果を格納する変数がDoubleなら落ちない。
・結果を格納する変数がDoubleでないなら、無限大の値を格納しようとしてオーバーフロー例外がスローされる。


Decimal型であれば事前にDouble型に変換されないので、0除算例外が発生する。
Dim d1 As Decimal = 1
Dim d2 As Decimal = 0
Dim ret3 As Double = d1 / d2


除算するときはDecimalにキャストしてからにしよっと。

0 件のコメント: