タイトル : Re: VB2005での0除算例外について 投稿日 : 2007/12/11(Tue) 16:49 投稿者 : 魔界の仮面弁士
> Doubleで0除算例外がキャッチできなくなったことを知りました。 Double 型の場合、 正数 ÷ ゼロ = +∞ ゼロ ÷ ゼロ = 非数値(NaN) 負数 ÷ ゼロ = -∞ となる仕様となっています。 これらの特殊な値については、Double型の共有メソッドで判定できます。 たとえば、正の無限大であるかどうかを判定するなら、 Double.IsPositiveInfinity メソッドですね。 ちなみに、これらの特殊な Double 値というのは、VB6 でも内部的には 利用可能でしたが、VB6 上では(0 除算等を行っても)生成できないため、 ヘルプ等には、特に記載されていなかったようです。 なお、VB6 で「無限大」や「NaN」データを構築する方法は、この辺りを参照。 蛇足までに。 http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?no=10740&reno=10733&oya=10731&mode=msgview&page=30 > c = CInt(a / b) > とすることで、例外をキャッチすることが可能なのですが、 ただしそれは、ゼロ除算の例外ではありませんよね。 > このa,bに小数点付きの値が入る場合 それならば、「Decimal型」を利用してみては如何でしょうか? 求める演算精度にもよりますけれども。 > できればDoubleを使用し、例外の処理が > 生じたときにキャッチしてやりたいのですが、 この場合に実装しておくべきことは、「例外処理」ではなく「If b = 0.0 Then」です。 今回の「DivideByZeroException」や「OverflowException」などといった例外は、 プログラム側で、事前に値を検証することで回避できるのですから、そもそも、 『それらの例外が発生しないようなプログラムを書く』のが、本来の姿だと思いますよ。 |