タイトル : Re^3: VB2005での0除算例外について 投稿日 : 2007/12/11(Tue) 19:32 投稿者 : 魔界の仮面弁士
> VB6.0では例外処理は > Try > 'ソースコード > Catch ex As Exception > 'エラー時の処理 > End Try > の形で済ましてしまうことが多く、 ??? VB6 では、Try ステートメントはサポートされていないハズです。 On Error ステートメントならありますけれどね。 それと、Catch 句ですべての Exception を拾っていますが、むやみやたらと Catch してしまうのはマズイです。処理すべき例外のみ拾うようにしましょう。 (拾った例外が想定外のものであったなら、Throw しなおした方が良いですよ) http://www.ailight.jp/blog/kazuk/articles/6298.aspx > 除算を実行する前に、整数の数式は必ず Double 型に拡大変換されているので > オバーフローの例外になるのですね。 違います。 型が Double になったからではなく、結果が「無限大」だったからです。 Double に拡大変換された後の値が、Integer.MinValue 〜 Integer.MaxValue の 範囲内にあるならば、CInt してもオーバーフローにはなりません。 > データ型を「Decimal」に変換することで思い通りの処理ができるようになりました。 > 例外処理をキャッチすることばかりにとらわれていたのでデータ型を変更することを > 思いつきませんでした(^^; あれれ。たるとさんが参考にされていたサイト(猿頁)には、はっきりと 『ちなみに、Decimal型の場合は事前のDouble型変換が行われないので、0除算例外が発生します。』 という記述があったはずなのですが……。 |