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

関連記事

「別のプログラムがこのフォルダーまたはファイルを開いているので、操作を完了できません。」と表示された場合の対処法:Windows7

今日は2017年秋期の情報処理試験でしたが、受験されたみなさまいかがでしたでしょうか? ろくすっぽどころか、参考書すら買ってない状態だけど、情報処理試験の午前だけは受けに行く(起きれたら)。 午前は択 …

TortiseSVNなんだけど、自分が原因で「already locked」が出てしまった時の対処法。自分がロックを取ってて、ロックが取れずコミットが出来ない事態に遭遇した・・・

SVNを使っていると、たまにありますね。 ロックが既に誰かに取得されていて、コミットしようとした時に、唖然とするやつ。 ただ、今回は状況が違いました。 いつもなら、「ロック取ってるやつ誰だよ~」って感 …

OracleDataaccessでどハマリして、勉強になったとかじゃなくお客さんに迷惑かけたし、もう穴を掘って埋まりたい

みんなは、どうやってOracleDataaccessを筆頭に、複数バージョンが入り乱れるDLLを管理してるのか教えてください。 マジで。

Oracleで「ORA-00918: 列の定義が不明瞭です 」のエラーの解決法と発生理由

発生したエラー ORA-00918: 列の定義が不明瞭です 原因 原因は、同じ列名やテーブルの別名を使用していること。 解決方法 Select句で羅列している列に同一の列名(別テーブル)があれば、as …

WindowsのコマンドプロンプトでUnicodeを扱おうとして挫折した。

WindowsのコマンドプロンプトでUnicodeのファイル名を扱うためのバッチファイルをどうたらこうたら。 http://daily-misc.blogspot.jp/2014/12/windows …


カテゴリー