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

関連記事

[ORACLE]最初の有効値を返すCOALESCE・・・読み方分からねぇw

知らなかったら、多分CASEとかで判定してた。 まぁ、人の書いたSQLは勉強になるよねって話・・・じゃないなw 事の発端は、今のプロジェクトで別の人が作った画面の修正をやることになったこと。 その人は …

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

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

DLLのプロパティのブロック解除をして、ダウンロードしたプログラムを起動出来るようにする

よくありますよね・・・ いや、普通は無いかも・・・ 今、開発中のプログラムなんですが、正式なビルドはサーバーで実行してる訳です。 で、各自がアップロードされたEXE等をDLして最新の実行環境としてる。 …

[Windows]タスクバーに表示される「最近使ったもの」が多すぎて消せないので、一括削除する方法

さて、Windows使いの人なら、地味に便利に使っている・・・かもしれない「最近使ったもの」という一覧。 確かに、同じフォルダを開きたい時とかは重宝します。 が、たまにウザいw 場合によっては消さなき …

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

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


カテゴリー