0除算の例外処理ができない!!助けて!!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Try
If (Flag = "数値") Then
Flag = "演算子"
Work = Total + Calc + Input
Total = js.Eval(Work)
Input = ""
TextBox1.Text = Total
End If
Catch ex As Exception
MessageBox.Show("Exception Error : 0除算を行いました。")
End Try
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Total + Calc + Inputは、すべて文字列です。
実行すると、ポップアップではなく、テキストエリアにこんな文字列が・・・
0除算しても例外が発生しない・・・
0 / 0 ・・・NaN (非数値)
1 / 0 ・・・+∞
そもそも、0除算ってなんですか??? 0で割っても例外が出ない!!
No.4ベストアンサー
- 回答日時:
・コードが少ない
・変数の型が不明
・変数なのかも不明
・クラスの中身が不明
もっと単純に記述してからクラス化した方がいいのでは?
むしろわかりやすく書かないと的確な答えは返ってこない。
Exceptionでは0除算のエラーは拾えません。
だからCatchできないのです。
--------------------------------------------------------------
Try
If (Flag = "数値") Then
Flag = "演算子"
Work = Total + Calc + Input
Total = js.Eval(Work)
Input = ""
TextBox1.Text = Total
End If
Catch ex As Exception
MessageBox.Show("システムエラーが発生しました。")
Catch Zero_ex As DivideByZeroException
MessageBox.Show("Exception Error : 0除算を行いました。")
End Try
--------------------------------------------------------------
■Exceptionとは
http://msdn.microsoft.com/ja-jp/library/system.e …
■ゼロ除算の回避方法
http://blog.livedoor.jp/akf0/archives/51073757.h …
この回答への補足
本当にTry...Catchが出来ているか?
数字ボタンにあえて、Aボタンというのを作ってみました。
速効で、エラーメッセージが出ました。当たり前ですね・・・
Aボタンは消したので、0除算エラーではなく、
エラーが出るとしたら、.←小数点ボタンを2、3回押したときぐらいでしょう。。。
ありがとうございます。
jsの型は、MSScriptControl.ScriptControlです。
Microsoft.JScriptではなく、Microsoft Script Control 1.0を使っています。
クラスの中身はString型しか入ってきません。
>Exceptionでは0除算のエラーは拾えません。
驚愕の事実です。
>'System.DivideZeroException'は、'System.Exception'から継承するため、'Catch'ブロックは到達しませんでした。
順番を入れ替えたら、エラーが消えました。
Exceptionが大元?まとめ役?
Catch Zero_ex As DivideByZeroException
MessageBox.Show("Exception Error : 0除算を行いました。")
Catch ex As Exception
MessageBox.Show("システムエラーが発生しました。")
入れる前:
0 / 1 = 0
0 / 0 = NaN(非数値)
Catch Zero_ex As DivideByZeroExceptionを追加:
0 / 1 = 0
0 / 0 = NaN(非数値)
0除算エラー出ない・・・
Exceptionのキャッチを消して、Catch Zero_ex As DivideByZeroExceptionだけにしてみた:
0 / 1 = 0
0 / 0 = NaN(非数値)
できない!!!1日掛って0除算できない。。。
No.5
- 回答日時:
>Exceptionっていくつもあって、複数書かないとキャッチできないってことですか。
>Exceptionを書けば、全部キャッチしてくれると思ってました。
投げた奴はキャッチできるけど,そもそも投げないらしい(俺にとっても意外だった。)
まず,Script Controlは置いておいて,
================================================
Option Strict On
Option Compare Binary
Option Infer Off
Class Program
Shared Sub Main()
Dim x As Double = 1.0
Dim y As Double = 0.0
try
System.Diagnostics.Debug.Print((x / y).ToString())
catch e As System.DivideByZeroException
System.Diagnostics.Debug.Print("error 1")
end try
Dim a As Integer = 1
Dim b As Integer = 0
try
System.Diagnostics.Debug.Print((a \ b).ToString())
catch e As System.DivideByZeroException
System.Diagnostics.Debug.Print("error 2")
end try
End Sub
End Class
これのアウトプットウィンドウへの出力結果は
+∞
error 2
となります
(Double型の場合,例外自体が発生しないからerror 1のルートを通らない。
多分上をSingle型にしたり,下をLong型にしたりしても同じ出力になるでしょう。)
http://msdn.microsoft.com/en-us/library/25bswc76 …
#説明によると戻り値を特定の型の変数で受けようとすると挙動が変わることがあるようだ。
なお,\演算子は演算子オーバーロードによって各引数がLongでないものも取れますが,そのときはLongに丸めます。
\演算子の除数が計算されたとき0と等しくなった場合は,どんなときでもDivideByZeroExceptionを発生させるそうです。
http://msdn.microsoft.com/en-us/library/0e16fywh …
ちなみにC#の場合は,この二つの演算がどちらも/演算子によって行われる
class hoge{
public static void Main(){
try{
System.Console.WriteLine(1 / 0);
}catch(System.DivideByZeroException e){ // 発生する
}
try{
System.Console.WriteLine(1.0 / 0.0);
}catch(System.DivideByZeroException e){ // 発生しない
}
}
}
======================================================
>VBが前提かと思ってました・・・
Microsoft Script ControlがEvalする文字列が(VB.NETではなく)VBScript,JScript等になっている,というつもりで言った。
C#と勘違いしているのは俺がボケていただけ。
確認はしていませんが,おそらくDoubleやSingleの時,例外を投げない挙動はVBScriptでもJScriptでも同じなんじゃないかなーと思っている。
#例外を投げないんだから
それとは別の議論として(メイン)
VBScriptやJScript内で例外が出たときにVB.NETの例外としてちゃんと捕捉できるのかが自信ない…多分無理だろうなと思っているんだ。
=======================================================
>Visual Studio 2005を使っていて、プロジェクトは初期設定のままで、
Option ExplicitはOnで、Option Strictは(カスタム)となっています。
ソースに直書きが主流なの?!
あ,自分が直書きしているもんだからつい…
ありがとうございます。
そもそも、「0 / 0 = NaN(非数値)」という結果だとなにがダメなんですか?
1 / 0 = +∞ でもいいと思いますけどね。ダメですか?
No.3
- 回答日時:
#最初はC#だと思って勘違いをし,次にVB.NETだと勘違いした。
>Yune-Kichiさん
変数jsの型が明示されてないから,回答としては「知らん」で突き放しても俺はOKだというスタンスだ…が,今回は置いておく。
掲示の式の評価はEcmascriptだから\演算子がそもそもないよ(C#だと思って,整数演算用の演算があると勘違いしている俺の記述も誤り。IEEE 754のくだりは間違っているとは思わない)…っていおうとしたんだけどなあ。
Microsoft.JScript.EvalのJScriptEvaluateとも思ったんだけど。Evalメソッドはないね、このクラスなんだろう…
http://msdn.microsoft.com/en-us/library/microsof …
http://msdn.microsoft.com/en-us/library/cw8bx66y …
#うまく表現できなくて完璧に愚痴になってます、ごめんなさい
ありがとうございます。
Visual Studio 2005のVisual Basicです。
教えて!goo > [技術者向] コンピューター > プログラミング > Visual Basic
に投稿したので、VBが前提かと思ってました・・・
教えて!gooじゃないとこはカテゴリが表示されない???
jsの型は、MSScriptControl.ScriptControlです。
中身はString型しか入ってきません。
Microsoft.JScriptではなく、Microsoft Script Control 1.0です。
No.2
- 回答日時:
ちなみに,/演算子は浮動小数点数の除算を行います。
整数除算には,\演算子を使います。
0割りを調べたいなら,CatchするのはDivideByZeroExceptionのみにしましょう。
このコードだと,InvalidCastExceptionでも0除算だと表示されます。
ありがとうございます。
InvalidCastException・・・初めて聞いた言葉です
型が違うってことは、ボタンを押して操作する電卓なので起こらないと思います。
浮動小数点の除算なので/演算子で良いと思います。
いろいろなExceptionがあることを知りました。
No.1
- 回答日時:
IEEE 754の規格で浮動小数点数同士の除算では,例外が発生せず,そういう挙動をすると書かれているらしい。(つまり仕様)
整数同士の演算では例外は発生します。
#Option Explicit OnもOption Strict Onもないコードなんか嫌いだ。
ありがとうございます。
参考サイト見させていただきました。
Exceptionっていくつもあって、複数書かないとキャッチできないってことですか。
Exceptionを書けば、全部キャッチしてくれると思ってました。
>整数同士の演算では例外は発生します。
言ってる意味がわかりません。
>Option Explicit OnもOption Strict Onもないコードなんか嫌いだ。
Visual Studio 2005を使っていて、プロジェクトは初期設定のままで、
Option ExplicitはOnで、Option Strictは(カスタム)となっています。
ソースに直書きが主流なの?!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Excel(エクセル) excel2013 色付きセルの値合計 3 2023/02/28 11:48
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
大人になっても苦手な食べ物、ありますか?
大人になっても、我慢してもどうしても食べれないほど苦手なものってありますよね。 あなたにとっての今でもどうしても苦手なものはなんですか?
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
うちのカレーにはこれが入ってる!って食材ありますか?
カレーって同じルーから作っても、家庭によって入っているものや味が微妙に違っていて面白いですよね! 「我が家のカレーにはこれが入ってるよ!」 という食材や調味料はありますか?
-
0除算して、落ちるプログラムと落ちないプログラム
C言語・C++・C#
-
0での割り算
Visual Basic(VBA)
-
テキストボックスの中身をリセット(クリア)したい
Visual Basic(VBA)
-
-
4
DataViewで複数条件のフィルタのやり方
Visual Basic(VBA)
-
5
CloseとDisposeの違い
Visual Basic(VBA)
-
6
文字列で小数点以下の0を削除したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
時間の取得
-
ファイルダイアログを開いた時...
-
全角スペースのチェックについて
-
if文からcase文への置き換え
-
例外ってIf文の中に入れますか...
-
XMLパーサの種類について混乱し...
-
VB.Net Object型 空かどうか
-
メソッドが存在するかどうかの...
-
C#の捕捉されない例外処理の対...
-
【java】ファイル名から画像を取得
-
VC++におけるCStringの変換
-
【JSPがブラウザで表示されませ...
-
VBA Evaluate関数 型が一致しま...
-
String型の日付(2005/11/25)の...
-
文字列からダブルクオートの削除
-
エクセルVBAで、条件に一致する...
-
配列の重複する値とその個数を...
-
変数名の付け方
-
private static という変数の修飾
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
VB.Net Object型 空かどうか
-
VB.NETで16進数が正しいかどう...
-
連続する「\\」をひとつの「\\...
-
VBA Evaluate関数 型が一致しま...
-
Timestamp型への変換について(J...
-
文字列からダブルクオートの削除
-
String型の日付(2005/11/25)の...
-
【JAVA】与えられた金額を貨幣...
-
C#の捕捉されない例外処理の対...
-
時間の取得
-
C# UriFormatExceptionの回避
-
VC++におけるCStringの変換
-
例外ってIf文の中に入れますか...
-
nullで、return出来るのはどん...
-
0除算の例外処理ができない!!...
-
WebClient()以外でネットにアク...
-
Javaで文字列をゼロ埋め(ゼロパ...
-
Excelでのエラー
-
タトゥーや墨を入れる人の共通点
おすすめ情報