環境:VisualStudioのFormアプリ.NET6.0
C#.NETで電卓のFormアプリを制作しています。
画面に表示される数字を”111,222,333,”のように3桁毎に区切った表示をさせたく思い、
以下のように実装したのですが上手くいきません。
実現したいこと
ここに実現したいことを箇条書きで書いてください。
- 電卓アプリの作成において3桁毎に区切った表示を行いたい
例)111,333,444,000
該当のソースコード
C#
1 // 「0」~「9」キー押下時 2 private void ButtonNumber_Click(object sender, EventArgs e)// 数字の番号を押した時 3 { 4 5 if (counter == 0) 6 { // 数字が16桁を越えたら以下を表示 7 labelResult.Text = "9,999,999,999,999,999"; 8 return; 9 10 } 11 12 // 計算結果をクリア 13 if (buttonEqualClicked == true) 14 { 15 labelResult.Text = ""; 16 buttonEqualClicked = false; 17 } 18 19 // 数値の入力 後方への追加 20 String text = labelResult.Text + ((Button)sender).Text; 21 22 // String型の変数textをdouble型の変数Nに変換 23 double N = Convert.ToDouble(text); 24 25 // double型の変数NをString型の変数text2に変換 最初の0を削除 26 String text2 = N.ToString(); 27 28 // 0を削除した上で数値をlabelResultに入力 29 labelResult.Text = text2; // 30 31 counter = counter - 1; 32 33 }
試したこと
/ / 0を削除した上で数値をlabelResultに入力 labelResult.Text = String.Format("{0:#,0}" ,text2); //左のようにコードを書きましたが上手く表示されませんでした。
上記の問題に関して、対応策をご教示いただけますと幸いです。
よろしくお願いいたします。
「C# 電卓アプリ作成 計算後の値をクリア」
https://teratail.com/questions/qcj8j9hgx70y34
②の回答は参考にならないでしょうか。
KOZ6.0さま
度々ご回答いただきありがとうございます。
非常に細かく書いてくださり、有難く拝読させていただいたのですが、
条件分岐以前に表記が上手くいかず、今困っているという次第です。
提示いただいた
”base.Text = decimalValue.ToString("#,##0");”
と同じような形で
" labelResult.Text = String.Format("{0:#,0}" ,N);"
と記載したのですが、ラベルに上手く表示がされません。
もしよろしければご教示願えませんでしょうか。
N には何が入っていて、どのように表示されるのでしょうか?
KOZ6.0さま
失礼いたしました。
Nにはラベルに表示される数字が入っています。
表示は"99999999999999"のように","のない形で表示されてしまいます。
コードは以下になります。
// 数値の入力 後方への追加
String text = labelResult.Text + ((Button)sender).Text;
// String型の変数textをdouble型の変数Nに変換
double N = Convert.ToDouble(text);
labelResult.Text = String.Format("{0:#,0}" ,N);
は問題ないはずです。
実行した後で、labelResult.Text に何が入っているかを確認してください。
また、提示されたコード以外のところで書き換えられていないか確認してください。
KOZ6.0さま
ご教示いただきありがとうございます。
いただいた情報をもとに確認させていただきます。
小数点不要なんでしたっけ?
このように安易に編集しちゃうと、0.01 など、小数部にゼロが先行するものが入力できなくなってしまうのは前の質問の回答に書いた通りなのですが・・・
状態遷移表も書いてないみたいですし、あとはご自由に。
