.NET TIPS 数値を4けた区切りの文字列に変換するには?[C#、VB]デジタルアドバンテージ 一色 政彦2007/07/26 |
|
|
数値を文字列に変換する際に、桁(けた)数を容易に判別できるように、3桁置きに「,」という区切り文字を挿入することが多々ある。例えば「1234567」という数値は、次のように3桁ごとに区切られる。
1,234,567
数値からこのような3桁区切り文字列を作成する方法を、「TIPS:数値を3けた区切りの文字列に変換するには?」で紹介した。3桁区切りは日本や欧米で一般的な数値表現だが、現実の日本円の単位は4桁ごとに万→億→兆と繰り上がるので、4桁ごとに区切ってほしいという要望も少なくはないだろう。そこで本稿では4桁区切りにする方法について紹介する。
本稿でも、前掲のTIPSと同じくString.Formatメソッドを活用することで、数値から4桁区切り文字列を作成する。しかし、今回はこのString.Formatメソッドの挙動をカスタマイズすることになる。
String.Formatメソッドの書式指定項目に桁区切り記号「,」を指定すると、数値を文字列化する際に、“3”桁の「数値グループ」ごとに、“,”という「桁区切り文字」が挿入されるわけだが、この数値グループと桁区切り文字はカルチャに基づき決定されている(※.NETアプリケーションでは、ユーザー環境の言語コードの設定、いわゆるカルチャ/ロケールの設定に合わせて適切な表示が行えるように、カルチャという情報を持っている)。例えば日本語環境に対応するカルチャでは、数値グループは“3”桁、桁区切り文字は“,”と定義されている。
従って、数値グループを“4”桁に設定したカルチャを、現在のカルチャに置き換えれば、String.Formatメソッドの出力が自動的に4桁区切り文字列になるわけである。
まずはカルチャを自作する。具体的には、CultureInfoクラス(System.Globalization名前空間)のインスタンスを作成する。
カルチャ(=CultureInfoオブジェクト)は、次の2つのプロパティから、取得/設定することが可能だ(※ThreadはSystem.Threading名前空間に所属するクラス)。
CultureInfo.CurrentCultureプロパティ(読み取り専用)
Thread.CurrentThread.CurrentCultureプロパティ
本稿では、(現在のスレッドの)現在のカルチャをコピーして、まったく同じ内容のカルチャを利用することにする。これにはCultureInfoオブジェクトのCloneメソッドを呼び出せばよい。メソッドの戻り値で、現在のカルチャの複製(=クローン)が取得できる。
次に、新規に作成したカルチャの数値グループを“4”桁に設定する。数値グループの桁数の設定は、カルチャ(=CultureInfoオブジェクト)のNumberFormat.NumberGroupSizesプロパティ*1で設定できる。このプロパティの型は、int型(Integer型)の配列である。従って、「4桁ごと」の数値グループにするには、次のように指定すればよい(※「ci」は、カルチャすなわちCultureInfoオブジェクト)。
C#:ci.NumberFormat.NumberGroupSizes = new int[] { 4 };
VB:ci.NumberFormat.NumberGroupSizes = New Integer() {4}
*1 NumberFormat.NumberGroupSizesプロパティは、厳密には、NumberFormatプロパティで取得したNumberFormatInfoクラス(System.Globalization名前空間)のオブジェクトのNumberGroupSizesプロパティである。 |
最後に、このカルチャ(=CultureInfoオブジェクト)を、(現在のスレッドの)現在のカルチャに設定すればよい。これを行うには、先ほど示した「Thread.CurrentThread.CurrentCultureプロパティ」を利用すればよい(※「CultureInfo.CurrentCultureプロパティ」は読み取り専用のため、使えないことに注意)。
以上の内容を実装したのが、次のサンプル・プログラムだ。
|
||
数値を4桁区切りの文字列に変換するサンプル・プログラム(上:C#、下:VB) |
このプログラムを実行すると、確かに「1,2345,6789」のように4桁区切りになることが確認できるだろう。なお上記コードでは、書き換えたカルチャを元の状態に戻すため、もともとのカルチャのバックアップと復元の処理を入れている。
カテゴリ:クラス・ライブラリ 処理対象:文字列 使用ライブラリ:Stringクラス(System名前空間) 使用ライブラリ:Threadクラス(System.Threading名前空間) 使用ライブラリ:CultureInfoクラス(System.Globalization名前空間) 関連TIPS:数値を3けた区切りの文字列に変換するには? |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|