ホームに戻る
出典 :
Object.ToString メソッド (System) | Microsoft Docs 文字列を数値に変換する、数値を文字列に変換する - .NET Tips (VB.NET,C#...) 書式を指定して数値を文字列に変換する - .NET Tips (VB.NET,C#...) 日時(DateTimeオブジェクト)を文字列に変換する - .NET Tips (VB.NET,C#...) 【C#入門】ToStringで数値や日付を文字列に変換する方法 | 侍エンジニアブログ
関連 :
DateTime と TimeSpan [C#]オブジェクトの代入とコピー [C#]型判別、型キャスト、as・is
目次 :

オブジェクトを文字列に変換 : ToString()

オブジェクトに対応する文字列を得るための標準的な手法として、ToString() メソッドが用意されている。

組み込み型に対する ToString()

書式指定なし

ToString() を引数(書式指定)なしでコールした場合、以下のようになる。
// int型 int i = 100; Console.WriteLine( i.ToString() ); //> "100" // long型 long l = 100L; Console.WriteLine( l.ToString() ); //> "100" // float型 float f = 100.1F; Console.WriteLine( f.ToString() ); //> "100.1" // double型 double d = 100.1; Console.WriteLine( d.ToString() ); //> "100.1" // bool型 bool b = true; Console.WriteLine( b.ToString() ); //> "True"

書式指定あり

ToString() の引数に書式指定文字列を指定することで、出力形式を変更できる。
標準書式指定文字列の例
以下で構成される、標準書式指定文字列を指定した場合の例を記す。
書式
指定子
形式 説明
C
または
c
通貨 通貨記号と、必要に応じて桁区切り記号が入る。
精度指定子は小数部の桁数。
既定の精度、および通貨記号はカルチャによって異なる。
(10000).ToString("C") = "\10,000" (-100.5).ToString("C") = "-\101" (12345.5555).ToString("C2") = "\12,345.56"
D
または
d
10進整数
(0埋め)
整数型のみサポート。
精度指定子は最小桁数。
最小桁数に満たない場合は左側に0が挿入される
(12345).ToString("D") = "12345" (12345).ToString("D8") = "00012345" (-12345).ToString("D6") = "-012345" (12345).ToString("D4") = "12345"
E
または
e
指数
(0埋め)
精度指定子は小数部の桁数。
既定の精度指定子は6。
(123.456).ToString("E") = "1.234560E+002" (0.0).ToString("e") = "0.000000e+000" (-123.45).ToString("E8") = "-1.23450000E+002" (0.12345).ToString("E3") = "1.235E-001"
F
または
f
固定小数点 精度指定子は小数部の桁数。
既定の精度指定子はカルチャによって異なる。
(123.456).ToString("F") = "123.46" (1).ToString("F") = "1.00" (-123.456789).ToString("F4") = "-123.4568" (0.1).ToString("F6") = "0.100000"
G
または
g
一般 精度指定子は有効桁数。
既定の精度指定子は数値型によって異なる。
(123456).ToString("G") = "123456" (0.00001).ToString("G") = "1E-05" (-0.00001).ToString("g") = "-1e-05" (123456).ToString("G4") = "1.235E+05" (-123.456).ToString("G4") = "-123.5" (0.0).ToString("G4") = "0"
N
または
n
桁区切り 必要に応じて桁区切り記号が入る。
精度指定子は小数部の桁数。
既定の精度指定子はカルチャによって異なる。
(1234.56789).ToString("N") = "1,234.57" (10000).ToString("N") = "10,000.00" (-1234.56789).ToString("n4") = "-1,234.5679"
P
または
p
パーセント 数値に100を掛けてパーセント記号を付ける。
精度指定子は小数部の桁数。
既定の精度指定子はカルチャによって異なる。
(1).ToString("P") = "100.00%" (-0.123456789).ToString("p") = "-12.35%" (100).ToString("P") = "10,000.00%" (0.00001).ToString("P") = "0.00%" (0.123456789).ToString("P4") = "12.3457%" (0.125).ToString("P0") = "13%"
R
または
r
ラウンドトリップ 数値の変換後の文字列が、
変換前の数値へ戻るように解析される。
使用できる型に制限あり。
精度指定子は無視される。
(123456789.123456789).ToString("R") = "123456789.12345679" (-123456789.123456789).ToString("R") = "-123456789.12345679"
X
または
x
16進整数 整数型のみサポート。
精度指定子は最小桁数。
最小桁数に満たない場合は左側に0が挿入される。
(10).ToString("X") = "A" (-1).ToString("x") = "ffffffff" (10).ToString("X4") = "000A"
カスタム書式指定文字列の例
標準の書式指定文字列以外に、以下の形式を使用できる。
形式 説明
0 ゼロ
プレースホルダ
(0埋め)
対応する数字で0を置き換える。
対応する数字がない時は0が表示。
(123).ToString("00000") = "00123" (-1.2).ToString("00.00") = "-01.20" (123.456).ToString("00.00") = "123.46" (123.456).ToString("0") = "123"
#
プレースホルダ
対応する数字で#を置き換える。
対応する数字がない時は表示されない。
(123).ToString("#####") = "123" (123.456).ToString("#") = "123" (-123).ToString("#####") = "-123" (0.123456).ToString("#.####") = ".1235"
. 小数点 小数点の位置を決める。
小数点の記号はカルチャによって異なる。
(123.456).ToString("0.00") = "123.46" (1.23456).ToString("0.0.0") = "1.23"
, 桁区切り記号
および
数値の位取り
0 または # の間にコンマがある時は、
桁区切り記号が入る。
区切り記号と区切られる桁数は
カルチャによって異なる。
小数点のすぐ左にコンマがある時は、
コンマ1つにつき数値が1000で除算される。
(123456789).ToString("#,0") = "123,456,789" (123456789).ToString("0,") = "123457" (123456789).ToString("0,,") = "123" (123456789.12).ToString("0,.###") = "123,456.789" (1).ToString("0,0,0") = "001" (1000).ToString("0,0,0") = "1,000"
% パーセント
プレースホルダ
数値に 100 を乗算し、パーセント記号を付ける。
パーセント記号はカルチャによって異なる。
(0.123456).ToString("0.00%") = "12.35%" (0.123456).ToString("%0.00") = "%12.35"
パーミル
プレースホルダ
数値に 1000 を乗算し、パーミル記号を付ける。
パーミル記号はカルチャによって異なる。
(0.123456).ToString("0.00‰") = "123.46‰" (0.123456).ToString("‰0.00") = "‰123.46"
E0
E+0
E-0
e0
e+0
e-0
指数表記 指数表記を使用する。
0の数で指数部の最小桁数が決まる。
(12.345).ToString("0.00E0") = "1.23E1" (12.345).ToString("0.00e00") = "1.23e01" (12.345).ToString("0.00E+0") = "1.23E+1" (12.345).ToString("0.00E-0") = "1.23E1" (0.12345).ToString("0.00E0") = "1.23E-1" (0.12345).ToString("0.00E+0") = "1.23E-1" (0.12345).ToString("0.00E-0") = "1.23E-1"
\ エスケープ文字 書式指定子の前に付けるとリテラルとして解釈される。 (12.345).ToString("\\0.##\#") = "\12.35#"
'文字列'
"文字列"
引用符 シングルクォートまたはダブルクオートで囲まれた文字列は
そのままコピーされる。
(12.345).ToString("0.##('0.##')") = "12.35(0.##)" (12.345).ToString("0.##(""0.##"")") = "12.35(0.##)"
; セクション
区切り記号
正の値、負の値、ゼロで書式を変える場合に使用する。
セミコロンが1つの場合、最初の書式は正の値とゼロ、
2番目の書式は負の値に適用される。
セミコロンが2つの場合、最初の書式は正の値、
2番目の書式は負の値、3番目の書式はゼロに適用される。
負の値にマイナス記号が付かないため、
マイナス記号を付けるなら書式内に記述する。
(10).ToString("000;[000]") = "010" (-10).ToString("000;[000]") = "[010]" (0).ToString("000;[000]") = "000" (10).ToString("000;[000];Zero") = "010" (-10).ToString("000;[000];Zero") = "[010]" (0).ToString("000;[000];Zero") = "Zero"
その他 上記以外の
すべての文字
文字がそのまま反映される。 (10).ToString("0個") = "10個" (1234).ToString("0あ0い0う0え0お0") = "0あ0い1う2え3お4"

クラスオブジェクトに対する ToString()

原則

Object 型を継承する全てのクラスオブジェクトでは、引数なしの ToString() を用いることができるが、
オーバーライドを行わない場合、返されるのはオブジェクトの型の完全修飾名である。
namespace MyNs; public class MyClass { : } class SomeClass { private void DoSomething() { MyClass ob; Console.WriteLine(ob.ToString()); //< 名前空間を含めた "MyNs.MyClass" が表示される } }
所望の形式の文字列を得るためにはオーバーライド(または引数を定めたオーバーロード)が必須である。

例外 : DateTime

日時を格納できる DateTime 型は、ToString() により格納している日時を文字列として出力できる。
同様に日時を取り扱う DateTimeOffset や TimeSpan も同様である。
詳細はDateTime と TimeSpanを参照のこと。

文字列を数値に変換 : Parse()

各数値型のクラスメソッド Parse() を用いることで、引数の文字列を数値に変換することが可能である。
変換に失敗した場合は例外がスローされる。 また、TryParse() メソッドを用いることで、変換が可能かどうかを判別することができる。
// 文字列をint型に変換 int i = int.Parse("100"); // 文字列をlong型に変換 long l = long.Parse("100"); // 文字列をfloat型に変換 float f = float.Parse("100.1"); // 文字列をdouble型に変換 double d = double.Parse("100.1"); // 文字列をbool型に変換 bool b = bool.Parse("True");

Convert クラス

Convert クラスには上記の ToString() や Parse() と同等のメソッドが実装されている。詳細は出典元を参照。