none
計算を中断する方法 RRS feed

  • 質問

  •  Dim atai As String

            atai = txtInput.Text

    Dim sum As Long
            sum = 1

            Do While atai> 0

                sum = sum * atai
                atai = (atai - 1)

            Loop

     

    このようにlong型で計算をしたのですが、

    もしlong型で計算できない大きな数値になった(オーバーフロー)場合は

    エラーメッセージをだして作業を中断したいのですが、どうすればいいのかわからないです。

     

    2009年1月6日 12:11

回答

  • 試しにオーバーフローさせてみましょう

     

    Code Snippet

     Dim atai As String

            atai = txtInput.Text

    Dim sum As Long
            sum = Long.MaxValue

            Do While atai> 0

                sum = sum * atai
                atai = (atai - 1)

            Loop

     

     

    exeを実行すると「算術演算の結果オーバーフローが発生しました」というエラーメッセージがでて終了しますね。

    やりたいのはこのエラーメッセージではなく、独自のメッセージをだす。終了ではなく処理を続行ですよね。

    オーバーフロー発生時にOverflowException例外が発生するのでこれをTry ~ Catch文で捕まえれば良いです。

     

    Code Snippet

            Dim sum As Long
            sum = Long.MaxValue

            Try
                Do While atai > 0
                    sum = sum * atai
                    atai = (atai - 1)
                Loop
            Catch ex As OverflowException
                MsgBox("オーバーフロー発生")
            End Try

     

     

    2009年1月6日 13:16

すべての返信

  • 試しにオーバーフローさせてみましょう

     

    Code Snippet

     Dim atai As String

            atai = txtInput.Text

    Dim sum As Long
            sum = Long.MaxValue

            Do While atai> 0

                sum = sum * atai
                atai = (atai - 1)

            Loop

     

     

    exeを実行すると「算術演算の結果オーバーフローが発生しました」というエラーメッセージがでて終了しますね。

    やりたいのはこのエラーメッセージではなく、独自のメッセージをだす。終了ではなく処理を続行ですよね。

    オーバーフロー発生時にOverflowException例外が発生するのでこれをTry ~ Catch文で捕まえれば良いです。

     

    Code Snippet

            Dim sum As Long
            sum = Long.MaxValue

            Try
                Do While atai > 0
                    sum = sum * atai
                    atai = (atai - 1)
                Loop
            Catch ex As OverflowException
                MsgBox("オーバーフロー発生")
            End Try

     

     

    2009年1月6日 13:16
  • ありがとうございました。私のコードに加筆していただき、大変分かりやすかったです。

    とても助かりました。

     

    2009年1月6日 13:39