数値を文字列に変換する。書式指定も紹介します。

数値

数値を文字列に変換

数値を文字列に変換するだけであれば以下のようにすれば対応できます。

//変換したい数値
int num = 1234567;  

//文字列に変換
string str1 = num.ToString();

Console.WriteLine($"数値:{num} ⇒ 文字列:{str1}");

結果は文字列の”1234567″になります。

書式を指定して数値を文字列に変換

数値を文字列に変換するときに、ToString()のパラメータで書式の文字列を指定するとその書式で文字列変換されて出力されます。

例えば、数値に小数点2桁まで表現したいとすれば以下のようになります。

//変換したい数値
int num1 = 1234567;
double num2 = 123456.7;
double num3 = 123456.789;

string str1 = num1.ToString("0.00");
string str2 = num2.ToString("0.00");
string str3 = num3.ToString("0.00");

Console.WriteLine($"数値:{num1} ⇒ 文字列:{str1}(書式:小数点2桁)");
Console.WriteLine($"数値:{num2} ⇒ 文字列:{str2}(書式:小数点2桁)");
Console.WriteLine($"数値:{num3} ⇒ 文字列:{str3}(書式:小数点2桁)");

これを実行すると小数点2桁までを文字列にしてくれました。小数点3位以下は四捨五入で丸められています。

標準数値書式の指定による文字列への変換

ToStringの引数にはあらかじめ用意されています。

書式:通貨型 “C” or “c”

すべての数値型で利用できます。

int num1 = 1234567;

string str1 = num1.ToString("C");
string str2 = num1.ToString("c");
string str3 = num1.ToString("C3", new System.Globalization.CultureInfo("en-US", false));

Console.WriteLine($"数値:{num1} ⇒ 通貨:str1 = {str1}");
Console.WriteLine($"数値:{num1} ⇒ 通貨:str2 = {str2}");
Console.WriteLine($"数値:{num1} ⇒ 通貨:str3 = {str3}");
実行結果
数値:1234567 ⇒ 通貨:str1 = \1,234,567
数値:1234567 ⇒ 通貨:str2 = \1,234,567
数値:1234567 ⇒ 通貨:str3 = $1,234,567.000

書式:Decimal (10 進数型) “D” or “d”

整数型のみサポートしています。符号付も対応しています。

int num1 = 1234567;

string str1 = num1.ToString("D");
string str2 = num1.ToString("d");
string str3 = num1.ToString("D10");

Console.WriteLine($"数値:{num1} ⇒ Decimal:str1 = {str1}");
Console.WriteLine($"数値:{num1} ⇒ Decimal:str2 = {str2}");
Console.WriteLine($"数値:{num1} ⇒ Decimal:str3 = {str3}");
実行結果
数値:1234567 ⇒ Decimal:str1 = 1234567
数値:1234567 ⇒ Decimal:str2 = 1234567
数値:1234567 ⇒ Decimal:str3 = 0001234567

書式:指数 “E” or “e”

すべての数値型をサポートしています。

int num1 = 1234567;
double num2 = 0.00968;

string str1 = num1.ToString("E");
string str2 = num2.ToString("e");
string str3 = num2.ToString("E2");

Console.WriteLine($"数値:{num1} ⇒ 指数:str1 = {str1}");
Console.WriteLine($"数値:{num2} ⇒ 指数:str2 = {str2}");
Console.WriteLine($"数値:{num2} ⇒ 指数:str3 = {str3}");
実行結果
数値:1234567 ⇒ 指数:str1 = 1.234567E+006
数値:0.00968 ⇒ 指数:str2 = 9.680000e-003
数値:0.00968 ⇒ 指数:str3 = 9.68E-003

書式:固定少数点 “F” or “f”

すべての数値型をサポートしています。表示桁より小さい値は四捨五入で丸められます。

int num1 = 1234567;
double num2 = 0.00967654321;

string str1 = num1.ToString("f");
string str2 = num2.ToString("f");
string str3 = num2.ToString("f6");

Console.WriteLine($"数値:{num1} ⇒ 固定少数点:str1 = {str1}");
Console.WriteLine($"数値:{num2} ⇒ 固定少数点:str2 = {str2}");
Console.WriteLine($"数値:{num2} ⇒ 固定少数点:str3 = {str3}");
実行結果
数値:1234567 ⇒ 固定少数点:str1 = 1234567.00
数値:0.00967654321 ⇒ 固定少数点:str2 = 0.01
数値:0.00967654321 ⇒ 固定少数点:str3 = 0.009677

書式:全般 “G” or “g”

すべての数値型をサポートしています。固定小数点表記または指数表記のいずれかのより簡潔になる方で変換されます。

int num1 = 1234567;
double num2 = 1.4324e-2;
double num3 = 1.4324e-25;
double num4 = 0.0000000000000000000000000000000000000123;

string str1 = num1.ToString("g");
string str2 = num2.ToString("g");
string str3 = num3.ToString("G");
string str4 = num4.ToString("G");

Console.WriteLine($"数値:{num1} ⇒ 全般:str1 = {str1}");
Console.WriteLine($"数値:{num2} ⇒ 全般:str2 = {str2}");
Console.WriteLine($"数値:{num3} ⇒ 全般:str3 = {str3}");
Console.WriteLine($"数値:{num4} ⇒ 全般:str4 = {str4}");
実行結果
数値:1234567 ⇒ 全般:str1 = 1234567
数値:0.014324 ⇒ 全般:str2 = 0.014324
数値:1.4324E-25 ⇒ 全般:str3 = 1.4324E-25
数値:1.23E-38 ⇒ 全般:str4 = 1.23E-38

書式:桁区切り “N” or “n”

すべての数値型をサポートしています。

int num1 = 1234567;
double num2 = 5012305;
double num3 = 1.4324e+25;

string str1 = num1.ToString("N");
string str2 = num2.ToString("n0");
string str3 = num3.ToString("n3");

Console.WriteLine($"数値:{num1} ⇒ 桁区切り:str1 = {str1}");
Console.WriteLine($"数値:{num2} ⇒ 桁区切り:str2 = {str2}");
Console.WriteLine($"数値:{num3} ⇒ 桁区切り:str3 = {str3}");
実行結果
数値:1234567 ⇒ 桁区切り:str1 = 1,234,567.00
数値:5012305 ⇒ 桁区切り:str2 = 5,012,305
数値:1.4324E+25 ⇒ 桁区切り:str3 = 14,324,000,000,000,000,000,000,000.000

書式:16 進数 “X” or “x”

整数型のみサポートしています。

int num1 = 16;
int num2 = 255;

string str1 = num1.ToString("x");
string str2 = num2.ToString("X");
string str3 = num2.ToString("X4");  //4桁以上で表示する

Console.WriteLine($"数値:{num1} ⇒ 16進数:str1 = {str1}");
Console.WriteLine($"数値:{num2} ⇒ 16進数:str2 = {str2}");
Console.WriteLine($"数値:{num2} ⇒ 16進数:str3 = {str3}");
実行結果
数値:16 ⇒ 16進数:str1 = 10
数値:255 ⇒ 16進数:str2 = FF
数値:255 ⇒ 16進数:str3 = 00FF

カスタム書式

プレースホルダー

プレースホルダーとは、式や命令文に外部から渡される要素のことを指します。

ゼロプレースホルダー:0

対応する数値を0で置き換えます。

int num1 = 16;
double num2 = 123.456;

string str1 = num1.ToString("0000");
string str2 = num1.ToString("0.00");
string str3 = num2.ToString("0.00");  

Console.WriteLine($"数値:{num1} ⇒ ゼロプレースホルダー:str1 = {str1}");
Console.WriteLine($"数値:{num1} ⇒ ゼロプレースホルダー:str2 = {str2}");
Console.WriteLine($"数値:{num2} ⇒ ゼロプレースホルダー:str3 = {str3}");
実行結果
数値:16 ⇒ ゼロプレースホルダー:str1 = 0016
数値:16 ⇒ ゼロプレースホルダー:str2 = 16.00
数値:123.456 ⇒ ゼロプレースホルダー:str3 = 123.46

桁プレースホルダー:#

対応する数値を#で置き換えます。

int num1 = 1234;
double num2 = 123.456;
double num3 = 0.9876;

string str1 = num1.ToString("#,#");
string str2 = num2.ToString("#.##");
string str3 = num3.ToString("#.##");  

Console.WriteLine($"数値:{num1} ⇒ 桁プレースホルダー:str1 = {str1}");
Console.WriteLine($"数値:{num2} ⇒ 桁プレースホルダー:str2 = {str2}");
Console.WriteLine($"数値:{num3} ⇒ 桁プレースホルダー:str3 = {str3}");
実行結果
数値:1234 ⇒ 桁プレースホルダー:str1 = 1,234
数値:123.456 ⇒ 桁プレースホルダー:str2 = 123.46
数値:0.9876 ⇒ 桁プレースホルダー:str3 = .99

パーセントプレースホルダー:%

数値に100を掛けて、パーセント記号を付与します。

int num1 = 1;
double num2 = 1.23456;
double num3 = 0.9876;

string str1 = num1.ToString("0%");
string str2 = num2.ToString("0.##%");
string str3 = num3.ToString("0%");

Console.WriteLine($"数値:{num1} ⇒ パーセントプレースホルダー:str1 = {str1}");
Console.WriteLine($"数値:{num2} ⇒ パーセントプレースホルダー:str2 = {str2}");
Console.WriteLine($"数値:{num3} ⇒ パーセントプレースホルダー:str3 = {str3}");
実行結果
数値:1 ⇒ パーセントプレースホルダー:str1 = 100%
数値:1.23456 ⇒ パーセントプレースホルダー:str2 = 123.46%
数値:0.9876 ⇒ パーセントプレースホルダー:str3 = 99%

その他書式

指数書式:e

標準書式にあるeを使って指数の書式を変更します。
0.00e+00 となっている場合、指数eの位置から左と右で書式が適用されます。

int num1 = 987654;
double num2 = 0.000123456789;
double num3 = 98765432.1;


string str1 = num1.ToString("0.0e0");
string str2 = num2.ToString("0.0##e+0");
string str3 = num3.ToString("0.0e+00");

Console.WriteLine($"数値:{num1} ⇒ 指数表記:str1 = {str1}");
Console.WriteLine($"数値:{num2} ⇒ 指数表記:str2 = {str2}");
Console.WriteLine($"数値:{num3} ⇒ 指数表記:str3 = {str3}");
実行結果
数値:1 ⇒ パーセントプレースホルダー:str1 = 100%
数値:1.23456 ⇒ パーセントプレースホルダー:str2 = 123.46%
数値:0.9876 ⇒ パーセントプレースホルダー:str3 = 99%

エスケープ文字 “\” セクション区切り記号 ; その他

エスケープ文字は予約されている書式を文字リテラルとして利用することができます。

セクション記号は正の数値、負の数値、およびゼロの数値に対して、別々の書式を指定できます。

double num1 = 987654;
double num2 = -12345;
double num3 = 0;

string format = @"\\#0.00;\\(#0.00);\\\#";

string str1 = num1.ToString(format);
string str2 = num2.ToString(format);
string str3 = num3.ToString(format);

Console.WriteLine($"数値:{num1} ⇒ その他:str1 = {str1}");
Console.WriteLine($"数値:{num2} ⇒ その他:str2 = {str2}");
Console.WriteLine($"数値:{num3} ⇒ その他:str3 = {str3}");

正の整数の場合:\\#0.00、負の数値の場合:\\(#0.00)、ゼロの場合:\\\#

になるようになっています。\\は出力結果に\を出すために\#は#を出すためにエスケープしています。

実行結果
数値:987654 ⇒ その他:str1 = \987654.00
数値:-12345 ⇒ その他:str2 = \(12345.00)
数値:0 ⇒ その他:str3 = \#

まとめ

数値の文字列変換くらいじゃ短い記事になるかと思ったらとんでもない長さになってしまいました。
標準書式とカスタム書式で記事を分けた方がよかったかと反省してます。

この記事が皆様のお役に立てたら幸いです。

タイトルとURLをコピーしました