[C#]ToStringメソッドで簡単に桁区切りを実現する方法

投稿日:

結論

ToStringメソッドと書式設定で解決。

int a = 1;
int b = 1;
int ab = a * b;
string c = "";

//「1」になる
c = ab.ToString(“#,##0”);

//「90,000」になる
a = 100;
b = 900;
//ab = a * b;
c = (a * b).ToString(“#,##0”);
[/code]

区切り文字の設定って、実は面倒くさい

画面へ数値を表示させたり、計算結果をリアルタイムで変更させたりと計算自体は良く使います。

が、面倒くさいのが、各ラベルやテキストボックスの設定。
プロパティを設定しておかないといけないんです。

当然っちゃ当然なのですが、同じ「1000」を表示するにも、

  • 1000
  • 1,000
  • 1000.0
  • 1,000.0

といった感じでパターンがありまして、求められる項目で違ってくるんですよね。

ざっくり言うと、

  • 桁区切り
  • 小数点

この2つ。

金額項目は特に区切り文字必須

金額ベースの項目だと桁区切りは、ほぼ必須なイメージが強いです。
とはいえ、これは、見た目というか表示時に必要なものであって、実データに対して必要なものじゃあない。

となると、画面へ表示する時に桁区切りなら区切り文字の「,」を付与してやる必要があるわけで。

まぁ、テキストボックスやラベルへ文字としてセットすることが多いので、それぞれのプロパティでテキストフォーマット的なものを設定してやって終わりになることが多いです。

ということで、大体はプロパティで解決するんですが、時々解決できない場合が・・・

カスタムコントロールは便利な反面・・・

まぁ、今回の事例なんですが、カスタムコントロールを使用していて、プロパティで対応できない

ちょ・・・って感じなんですが、どうしようもないので対応せざるを得ません。

だれだよ、このコントロール作ったやつ・・・

一番簡単なのは、コントロール自体を取り替えてしまうことなんですが、ソース中の該当箇所も全て確認する必要があります。
これは、面倒くさ・・・見落としでバグの原因になってしまう!!

なので、別の方法を考えました。

それが「.ToString()」メソッド。

これ、お手軽にいろんなものを文字として返せる便利メソッド。

int a = 1000;
string b = "";

b = a;

ってやってしまうと、string型にint型は合わないってことでエラーになるんですが、

int a = 1000;
string b = "";

b = a.ToString();

ってしてやるだけでOKです。

このToStringメソッドは、さらに書式指定も可能で

int a = 1;
string b = "";

//「0001」になる
b = a.ToString(“0000”);

//「1.0」になる
b = a.ToString(“0.0”);

//1000が「1,000」になる
a = 1000;
b = a.ToString(“0,000”);
[/code]

こんな感じで、色々書式の変更が可能です。

桁数不明の時が困る

ただ、桁数が何桁になるか計算してみないと分からない時ってあります。
設定可能桁が5桁同士の掛け算の場合、0~9999800001まで範囲があるわけで。
そんなときに

int a = 1;
int b = 1;
int ab = a * b;
string c = "";

//「1」になる
c = ab.ToString("#,##0");

//「90,000」になる
a = 100;
b = 900;
ab = a * b;
c = ab.ToString("#,##0");

こんな風うに設定してやって解決。

一々「ab = a * b;」なんてやらなくても、

int a = 1;
int b = 1;
int ab = a * b;
string c = "";

//「1」になる
c = ab.ToString(“#,##0”);

//「90,000」になる
a = 100;
b = 900;
//ab = a * b;
c = (a * b).ToString(“#,##0”);
[/code]
これで、桁数に怯えることなくカンマ区切りの数字を設定できます。

まとめ

ToStringメソッドと書式設定で解決。

int a = 1;
int b = 1;
int ab = a * b;
string c = "";

//「1」になる
c = ab.ToString(“#,##0”);

//「90,000」になる
a = 100;
b = 900;
//ab = a * b;
c = (a * b).ToString(“#,##0”);
[/code]

「(a * b).ToString(“#,##0”);」のように、変数に対してだけでなく計算結果に直接書式設定もできるのは今回始めて知ったので、便利に使って生きたいな~。







-C#, 開発メモ
-,

関連記事

先日のデグレに引き続き、作業を一個抜かしたら、超絶怒られて始末書書かされた件

タイトルの通りで、始末書書かされました。 社内での信用0です。 先日のデグレの時もでしたが、今日も思いっきり怒られましたよ。 電話越しの無言は怖い。 日本の中心付近で仕様変更と闘うSE日記 1 Use …

改めて、コマンドプロンプトのrobocopyコマンドでバックアップを行う。

以前、会社では、バックアップ用のソフトを使っていたことがあります。 それも、社内ではなく、お客様用にw まぁ、それ自体は良いんですが、割とケチ?な会社だったので、使っているのはフリーソフト。 確か、商 …

C#で”LC.exe” はコード -1 を伴って終了しました(”LC.exe” exited with code -1)ってエラー

未だに確定した原因は自分で掴めてないんだけど、とりあえずエラーで検索して対策してみた。 どうにも、ビルド時にEXEフォルダ?とかにSRCフォルダからのコピーが上手くいかずにロックされてしまったりすると …

c#:高DPI環境化で、画面レイアウトが崩れる問題

自分の環境は高DPI(125%以上)ではないので、意識していなかったけど、客先環境でハマッたので。 状況は、Multirowを使った表部分が、高DPI環境下(125%)だと、レイアウトが崩れる問題。 …

コマンドプロンプトのFor文で、ファイルの一覧を表示する。

コマンドプロンプトの出力結果を引数として、別のコマンドを実行させる。 なんてことが出来ることは知ってるんだけど、どうやってやるのかは良く分からない。 おもむろにコマンドプロンプトを立ち上げて、以下のコ …


カテゴリー