[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#, 開発メモ
-,

関連記事

no image

ToolTip(ツールチップ)のPictureBoxに登録ものが表示されなくなった

PictureBoxに関連付けてたToolTip(ツールチップ)が表示されなくなる~C# http://ameblo.jp/oregano-blog/theme-10017227400.html 事の …

ORACLE:普段使っていないと、どうしても忘れるSQLメモ。

逆引きSQL構文集 文字列を置換する http://www.sql-reference.com/string/translate.html 文字列を連結する http://www.sql-refere …

なぜ、エラーが発生する? VirtualBoxでのUbuntu Linuxの起動に再チャレンジ。

前回、会社で遊べる勉強できる環境としてUbuntu Linuxを導入しようと画策していました。 前回は、あえなく断念・・・ 日本の中心付近で仕様変更と闘うSE日記VMWareがだめだったから、Virt …

MSCOMCTL.OCXの読み込みに失敗しましたエラーの対応方法

結論から言うと、マイクロソフトのページから、必要なものをDLして、適用しましょうって話。 OS:Windows7 Pro 64bit DLしたファイル:VisualBasic6-KB896559-v1 …

Windows 7な会社のPCからOneDriveをアンインストールしたので、その方法を紹介。

参考URL 「OneDrive」を完全にアンインストールする方法 http://www.lifehacker.jp/2015/09/150904_windows_10onedrive.html 参考先 …


カテゴリー