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

関連記事

C# OracleDbAccessを使用して、SQL実行時にORA-00911 文字が無効です のエラー

表題のとおり、C#でOracleDbAccessを使用して、SQLを実行させる時に発生しました。 ネットで探すと、 全角スペースが原因 とか出てきたので、SQL内のスペースを全て半角スペースに置き換え …

no image

[Xcode]C#とは違うエラーキャッチ方法

先日から、Swiftの勉強をしているわけですが、未だに仕事でメインで使っているC#との違いで戸惑うことがちらほらと。 repeat文なんて、VBやC#じゃ見ないよな。forやwhile文が対応してるけ …

C#で日数計算を行うのに、DateDiff関数を使う以外の方法。でも、ぶっちゃけ関数使った方が早いし正確だよ。

C#に限らず、プログラミング言語にはDateDiff相当の関数が用意されているはずです。 Excelでは普通に加減算が可能ですが。 そして、結論を言ってしまうと、そういう関数がある場合、それを使うべき …

Excelのシートが表示されなくなった時の対処法

Excelのシートが表示されなくなった! なんか、少しだけいつものExcelの画面と違いませんか? 人によっては、見慣れた画面かもしれませんが、左下にあるべきものがありません・・・ ちなみに、シートを …

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

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


カテゴリー