tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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」などといった例外は、
プログラム側で、事前に値を検証することで回避できるのですから、そもそも、
『それらの例外が発生しないようなプログラムを書く』のが、本来の姿だと思いますよ。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。