前提・実現したいこと
プログラミングをはじめて1か月程度のものです。
C#を使って電卓作成を行っています。
エラー箇所はConvertを使用したソース部分です。
Convertを使用する目的としては、
まず電卓のテキストボックスの初期値として入力されている「0」をButtonを押したときに消えるようにするためです。
例:「0」→「04」となってしまうのを「0」→(0を削除)「4」としたい
次に計算のために一時的に入力された数字を数値として扱うためです。つまり文字列型と数値型の変換を行いたいです。
この部分にかれこれ数日苦戦しています。
参考書やネットをあさりまくっていますがうまくいきません。。
発生している問題・エラーメッセージ
decimalからstringの変換がうまくいっていないようです。
別ファイルにConvertを使った部分を書き込み、文字列型から数値型に正常に変換出来ているかを動作確認していますがそちらでは問題なく動作します。しかし、Convert部分が複数になるとエラーが発生してしまいます。
System.FormatException: '入力文字列の形式が正しくありません。'
このエラーメッセージがConvert部分のどれかに出てしまいます。
該当のソースコード
C#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10 11namespace 電卓_三号機 12{ 13 public partial class Form1 : Form 14 { 15 public Form1() 16 { 17 InitializeComponent(); 18 } 19 20 bool isFirst = true; 21 decimal 値1 = 0; 22 23 private void buttonNumber_Click(object sender, EventArgs e) 24 { 25 //四則演算が押されていた場合表示されている数字を記憶し消す 26 if (記号 != 四則演算の記号.未定義 && isFirst) 27 { 28 値1 = Convert.ToDecimal(textDisplay.Text); 29 textDisplay.Text = ""; 30 isFirst = false; 31 } 32 textDisplay.Text = textDisplay.Text + ((Button)sender).Text; 33 34 //文字列 → 数値 35 decimal d = Convert.ToDecimal(textDisplay.Text); 36 37 //数値 → 文字列(先端の0が消える) 38 textDisplay.Text = d.ToString(); 39 40 } 41 42 private void buttonClaer_Click(object sender, EventArgs e) 43 { 44 textDisplay.Text = ""; 45 } 46 //小数点クリック 47 private void buttonDot_Click(object sender, EventArgs e) 48 { 49 //小数点の重複チェック 50 if (textDisplay.Text.IndexOf(".") >= 0) 51 { 52 //既に小数点がある 53 return; 54 } 55 textDisplay.Text = textDisplay.Text + "."; 56 } 57 58 enum 四則演算の記号 59 { 60 未定義,ADD, SUB, MUL, DIV 61 }; 62 63 四則演算の記号 記号; 64 65 private void buttonAdd_Click(object sender, EventArgs e) 66 { 67 記号 = 四則演算の記号.ADD; 68 isFirst = true; 69 } 70 71 private void buttonSub_Click(object sender, EventArgs e) 72 { 73 記号 = 四則演算の記号.SUB; 74 isFirst = true; 75 } 76 77 private void buttonMul_Click(object sender, EventArgs e) 78 { 79 記号 = 四則演算の記号.MUL; 80 isFirst = true; 81 } 82 83 private void buttonDiv_Click(object sender, EventArgs e) 84 { 85 記号 = 四則演算の記号.DIV; 86 isFirst = true; 87 } 88 89 private void buttonCalc_Click(object sender, EventArgs e) 90 { 91 //文字列 → 数値 92 decimal 値2= decimal.Parse(textDisplay.Text); 93 decimal 結果 = 0; 94 switch (記号) 95 { 96 case 四則演算の記号.ADD: 97 結果 = 値1 + 値2; 98 break; 99 case 四則演算の記号.SUB: 100 結果 = 値1 - 値2; 101 break; 102 case 四則演算の記号.MUL: 103 結果 = 値1 * 値2; 104 break; 105 case 四則演算の記号.DIV: 106 結果 = 値1 / 値2; 107 break; 108 } 109 textDisplay.Text = 結果.ToString(); 110 } 111 } 112} 113
試したこと
別ファイルにConvertを使った部分を書き込み、文字列型から数値型に正常に変換出来ているかを動作確認していますがそちらでは問題なく動作します。しかし、Convert部分が複数になるとエラーが発生してしまいます。
変換前の型が正しいかを確認しながら行いましたがどこが間違っているのかがわかりませんでした、、
補足情報(FW/ツールのバージョンなど)
visual studioの.Netframework(?)を使用しています。
回答2件
あなたの回答
tips
プレビュー