結論
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つ。
金額項目は特に区切り文字必須
金額ベースの項目だと桁区切りは、ほぼ必須なイメージが強いです。
とはいえ、これは、見た目というか表示時に必要なものであって、実データに対して必要なものじゃあない。
となると、画面へ表示する時に桁区切りなら区切り文字の「,」を付与してやる必要があるわけで。
まぁ、テキストボックスやラベルへ文字としてセットすることが多いので、それぞれのプロパティでテキストフォーマット的なものを設定してやって終わりになることが多いです。
ということで、大体はプロパティで解決するんですが、時々解決できない場合が・・・
カスタムコントロールは便利な反面・・・
まぁ、今回の事例なんですが、カスタムコントロールを使用していて、プロパティで対応できないw
ちょ・・・って感じなんですが、どうしようもないので対応せざるを得ません。
だれだよ、このコントロール作ったやつ・・・
一番簡単なのは、コントロール自体を取り替えてしまうことなんですが、ソース中の該当箇所も全て確認する必要があります。
これは、面倒くさ・・・見落としでバグの原因になってしまう!!
なので、別の方法を考えました。
それが「.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”);」のように、変数に対してだけでなく計算結果に直接書式設定もできるのは今回始めて知ったので、便利に使って生きたいな~。