仕事でVB.NETを扱うことになったので勉強しており、その課題として電卓を作っています。
VB歴2週間程度の初心者なので知識もほとんどなく(プログラミング歴自体1か月半程度です)、手探り状態ですが、いろんなサイトや本の見よう見まねで基本的な機能は実装することができました。
現時点では0~9の計算(+、-、*、/)、小数点の計算はできていると思います。
ここからが本題なのですが、
現在の仕様では桁数を13桁に設定しており、それをオーバーした場合に「桁数オーバー」と表示させたりメッセージボックスで表示させたりしたいのですが、桁数オーバーの計算をしても一度は計算ができてしまいます…
(例:9999999999 × 999999999999 = 9.9999999998E+21)
もう一度=を押すと表示されるのですが、どうしたら改善するでしょうか?
また、3桁ごとにカンマ区切りを入れたいと思っています。
単純にテキスト表示時に.ToString("#,0")を入れるだけでは小数点の計算ができていたものができなくなってしまいます。うまくカンマ区切りを入れるためにはどこにどのように記述するとよいのでしょうか?
以上2点について、時間がかかってもよいので初心者の私にでも理解できるような回答をいただけないでしょうか?
よろしくお願いいたします。
###該当のソースコード
'1のボタンクリック時 Private Sub Number1_Click(iSender As Object, iEvent As EventArgs) Handles Number1.Click 'エラー時の処理 If DisplayResult.Text = "E:桁数超過" Or DisplayResult.Text = "0で割ることはできません" Then Exit Sub End If '入力されたのが数字だった場合 If mBefore >= "0" And mBefore <= "9" Or mBefore = "." Then 'かつ12桁未満の数字が入力されているとき If DisplayResult.Text.Length < 12 Then DisplayResult.Text &= "1" Else MsgBox("これ以上入力できません", 48, "警告メッセージ") Exit Sub End If Else DisplayResult.Text = "1" End If mBefore = "1" End Sub '×のボタンクリック時 Private Sub Multiplication_Click(iSender As Object, iEvent As EventArgs) Handles Multiplication.Click 'エラー表示時の処理 If DisplayResult.Text = "E:桁数超過" Then Exit Sub End If '12桁未満なら計算可能 If DisplayResult.Text.Length < 12 Then '前回押した数字が1~9なら If mBefore >= "0" And mBefore <= "9" Then '前回の数字以外のボタンがCなら If mOther = "C" Then '最初に入力した数値をmResultに保管 mResult = CType(DisplayResult.Text, Double) '+なら ElseIf mOther = "+" Then 'mNumに表示されている値を保管 mNum = CType(DisplayResult.Text, Double) mResult = mResult + mNum '結果をmResultに保管して表示 If DisplayResult.Text.Length >= 13 Then DisplayResult.Text = "E:桁数超過" Exit Sub Else DisplayResult.Text = mResult End If '-なら() ElseIf mOther = "-" Then 'mNumに表示されている値を保管 mNum = CType(DisplayResult.Text, Double) mResult = mResult - mNum '結果をmResultに保管して表示 If DisplayResult.Text.Length >= 13 Then DisplayResult.Text = "E:桁数超過" Exit Sub Else DisplayResult.Text = mResult End If '*なら ElseIf mOther = "*" Then 'mNumに表示されている値を保管 mNum = CType(DisplayResult.Text, Double) mResult = mResult * mNum '結果をmResultに保管して表示 If DisplayResult.Text.Length >= 13 Then DisplayResult.Text = "E:桁数超過" Exit Sub Else DisplayResult.Text = mResult End If '/なら ElseIf mOther = "/" Then 'mNumに表示されている値を保管 mNum = CType(DisplayResult.Text, Double) If mNum = 0 Then MsgBox("0で割ることはできません", 48, "警告メッセージ") Exit Sub Else mResult = mResult / mNum End If '結果をmResultに保管して表示 If DisplayResult.Text.Length >= 13 Then DisplayResult.Text = "E:桁数超過" Exit Sub Else DisplayResult.Text = mResult End If End If Else '前回が数字以外なら Select Case mOther '前回がCなら Case "C" 'mResultに表示されている値を保管 mResult = CType(DisplayResult.Text, Double) '前回が=なら Case "=" mResult = mResult * mNum Case "*" mNum = mResult End Select End If Else MsgBox("これ以上入力できません", 48, "警告メッセージ") Exit Sub End If mBefore = "*" mOther = "*" mPoint = False End Sub '=のボタンクリック時 Private Sub Equal_Click(iSender As Object, iEvent As EventArgs) Handles Equal.Click If mBefore >= "0" And mBefore <= "9" Then mNum = CType(DisplayResult.Text, Double) End If Select Case mOther Case "+" mResult = mResult + mNum Case "-" mResult = mResult - mNum Case "*" mResult = mResult * mNum Case "/" If mNum = 0 Then MsgBox("0で割ることはできません", 48, "警告メッセージ") Exit Sub Else mResult = mResult / mNum End If End Select If DisplayResult.Text.Length < 12 Then DisplayResult.Text = mResult Else MsgBox("これ以上入力できません", 48, "警告メッセージ") Exit Sub End If mBefore = "C" mPoint = False End Sub
###補足情報(言語/FW/ツール等のバージョンなど)
Visual Studio 2012を使用しています。
そのほか必要な情報などございましたらご指摘お願いします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/13 01:57