スポンサーリンク
※サイト運営にサーバーは必須です※
~ ロリポップ! はコスパのよい初心者向けサーバーです~
目次
書式指定について
数値を文字へ変換の際に、書式を定めたい場合があります。
例えば、日本円を扱うのであれば、先頭に「\」(円マーク)を付けたいといった要望が考えられます。
他にも、0.05をパーセント表示(つまり、5%と表示)したい場合などが挙げられます。
これを実現するために、書式指定子(例えば、cやp)が使用されます。
数値の書式指定には、「標準の数値書式指定文字列」と「カスタム数値書式指定文字列」という2種類があります。
標準の数値書式指定文字列
標準の数値書式指定文字列は「書式指定子」と「精度指定子」の組み合わせから成ります。
書式指定子には、以下のようなものがあります。
書式指定子 | 意味 |
c(C) | 通貨 |
d(D) | 10進法表示(整数のみ) |
e(E) | 浮動小数点による指数表示 |
f(F) | 固定小数点による指数表示 |
g(G) | eまたはfのうち簡潔な表示 |
n(N) | 桁区切りされた表示 |
p(P) | パーセント表示 |
r(R) | 変換後の文字列が変換前の数値に戻れる必要な桁数を確保して表示(主にDouble型) |
x(X) | 16進法表示(整数のみ) |
詳しく知りたい場合は:
https://msdn.microsoft.com/ja-jp/library/dwhawy9k(v=vs.110).aspx
※書式指定子において、小文字と大文字に基本的な差はありません。ただし、出力される際文字を含む場合、小文字か大文字かの違いが生じます。(主に、書式指定子の「e」と「E」、「x」と「X」などは違いが生じます)
r(R)は、ラウンドトリップ(Round-trip)のRです。Round-tripは英語で往復(旅行)という意味があります。
r(R)は主に、double(Double)型やfloat(Single)型に対して使われます。整数に対しては、使われません。
※正確に言えば、Single 型、Double 型、BigInteger 型のみに対して使います。
数値を文字に変換する際に、もとの数値に戻るのに十分な桁数だけ確保されます。
double型の有効桁数が15桁、floatの有効桁数が7桁ほどしかありません。
このことを踏まえて、文字列に変換される際は、double型は最大で17桁、float型は、最大で9桁までしか確保しません。
そして、これ以上の桁数を覚えておくのは、無意味ということで、余分な桁数に関する情報は切り捨てられます。
精度指定子は、数値の精度を指定するために使用されます。
精度指定子に0~99の整数が入ります。設定しない場合は既定値が使われます。
※ラウンドトリップ書式指定子r(R)については、精度指定子を指定する必要がありません。指定した場合は無視されます。
例えば
Console.WriteLine(“{0:d6}”, 100);
と書くと、書式指定子は「d」で精度指定子が「6」となります。つまり、10進法表示で6桁分確保されます。
結果は以下のようになります。
000100
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Format02 { class Program { static void Main(string[] args) { Console.WriteLine("c(C)のテスト:通貨"); Console.WriteLine("{0:c}", 100); Console.WriteLine("{0:c}", 200.0); Console.WriteLine("-------------"); Console.WriteLine("d(D)のテスト:10進法表示"); Console.WriteLine("{0:d}", 100); Console.WriteLine("{0:d6}", 100);//6桁表記。結果は000100 Console.WriteLine("{0:d99}", 100);//99桁表記。結果は0…0100 //精度指定子は0~99までなので以下の文は、不適切 Console.WriteLine("{0:d100}", 100);//「d1」と「00」(カスタム数値書式指定子の0)の組み合わせと解釈される //サポートされているのは整数型のみなので以下の場合はエラー //Console.WriteLine("{0:d}", 100.5); Console.WriteLine("-------------"); //デフォルトでは小数点以下は6桁までしか表示されない Console.WriteLine("e(E)のテスト:浮動小数点"); Console.WriteLine("{0:e}", 1234); Console.WriteLine("{0:e}", 123456789);//デフォルトでは小数点以下は6桁までしか表示されない Console.WriteLine("{0:E}", 123456789);//大文字 Console.WriteLine("{0:e10}", 123456789); Console.WriteLine("{0:e10}", 1.23456789); Console.WriteLine("{0:e10}", 12345.67891234567); Console.WriteLine("-------------"); //デフォルトでは小数点以下は2桁までしか表示されない Console.WriteLine("f(F)のテスト:固定小数点"); Console.WriteLine("{0:f}", 1234); Console.WriteLine("{0:f}", 1.23456789012345); Console.WriteLine("{0:f}", 12345.67891234567); Console.WriteLine("{0:f10}", 1.23456789012345); Console.WriteLine("{0:f10}", 12345.67891234567); Console.WriteLine("-------------"); Console.WriteLine("g(G)のテスト:浮動小数点か固定小数点のうち最適な方"); //0.0001より小さい値を扱う場合。または、精度指定子から数値があふれている場合は浮動小数点による表記 Console.WriteLine("{0:g}", 123456789.012345);//固定小数点 Console.WriteLine("{0:g5}", 123456789.012345);//浮動小数点 Console.WriteLine("{0:g}", 0.0001);//固定小数点 Console.WriteLine("{0:g}", 0.000099);//浮動小数点 Console.WriteLine("-------------"); //n(N)は数字に対して、3桁間隔で区切りがつく //デフォルトでは小数点以下は2桁までしか表示されない Console.WriteLine("n(N)のテスト:3桁間隔で区切り"); Console.WriteLine("{0:n}", 1234);//1,234.00 Console.WriteLine("{0:n}", 123456789); Console.WriteLine("{0:n}", 1.23456789012345); Console.WriteLine("{0:n}", 123456789.1234); Console.WriteLine("{0:n4}", 123456789.1234); //Console.WriteLine("{0:n2}", 123456789012345.6789); Console.WriteLine("-------------"); //デフォルトでは%表記で小数点2桁までしか表示されない Console.WriteLine("p(P)のテスト:パーセント表示"); Console.WriteLine("{0:p}", 0.12); Console.WriteLine("{0:p}", 0.123456); Console.WriteLine("{0:p}", 1.2345);//100%を超える Console.WriteLine("{0:p4}", 0.123456789);//%表記で小数4桁まで(12.3457%) //Console.WriteLine("{0:P}", 0.123456);//変化なし Console.WriteLine("-------------"); Console.WriteLine("r(R)のテスト:ラウンドトリップ書式指定子"); Console.WriteLine("{0:r}", 12.34567); Console.WriteLine("{0:r}", 12.34567890123456789f);//flaot型、9桁分しか表示されない Console.WriteLine("{0:r15}", 12.34567890123456789f);//意味がない Console.WriteLine("{0:r}", 12.34567890123456789);//double型、17桁分しか表示されない //整数だとエラーが起こる //Console.WriteLine("{0:r}", 1234); Console.WriteLine("-------------"); Console.WriteLine("x(X)のテスト:16進数表示"); Console.WriteLine("{0:x}", 9); Console.WriteLine("{0:X}", 10);//大文字表記 Console.WriteLine("{0:x}", 10);//a Console.WriteLine("{0:x}", 11);//b Console.WriteLine("{0:x}", 12);//c Console.WriteLine("{0:x}", 13);//d Console.WriteLine("{0:x}", 14);//e Console.WriteLine("{0:x}", 15);//f Console.WriteLine("{0:x}", 16);//10 Console.WriteLine("{0:x}", 17);//11 } } } |
実行結果
c(C)のテスト:通貨
\100
\200
————-
d(D)のテスト:10進法表示
100
000100
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100
d1100
————-
e(E)のテスト:浮動小数点
1.234000e+003
1.234568e+008
1.234568E+008
1.2345678900e+008
1.2345678900e+000
1.2345678912e+004
————-
f(F)のテスト:固定小数点
1234.00
1.23
12345.68
1.2345678901
12345.6789123457
————-
g(G)のテスト:浮動小数点か固定小数点のうち最適な方
123456789.012345
1.2346e+08
0.0001
9.9e-05
————-
n(N)のテスト:3桁間隔で区切り
1,234.00
123,456,789.00
1.23
123,456,789.12
123,456,789.1234
————-
p(P)のテスト:パーセント表示
12.00%
12.35%
123.45%
12.3457%
————-
r(R)のテスト:ラウンドトリップ書式指定子
12.34567
12.3456793
12.3456793
12.345678901234567
————-
x(X)のテスト:16進数表示
9
A
a
b
c
d
e
f
10
11
カスタム数値書式指定文字列
カスタム数値書式指定文字列は、1つ以上のカスタム数値書式指定子で構成されています。
カスタム数値書式指定子には以下のようなものがあります。
書式指定子 | 意味 |
0 | 対応する位置に数字がない場合、0に置き換える |
# | 対応する数字がある場合#を数字に置き換える |
.(小数点) | 小数点 |
,(カンマ) | 桁区切り |
% | 100を乗じて、%(パーセント記号)をつける |
‰ | 1000を乗じて、‰(パーミル記号)をつける |
E0 | 指数表示 |
\ | カスタム書式指定子を単なる文字として解釈 |
;(セミコロン) | 正・負・ゼロの場合に対してそれぞれ異なる書式指定子を指定したい時に使用 |
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Coustom02 { class Program { static void Main(string[] args) { int num; Console.WriteLine("0のテスト:数字がない場合0を表示"); //0に対応する位置に数字が入っていない場合、0が表示されます Console.WriteLine("{0:00.00}", 1.2);//01.20 //小数点以下にある0の数が、小数点以下の表示桁数になります。はみ出した分は四捨五入 Console.WriteLine("{0:00.00}", 123.454); Console.WriteLine("{0:00.00}", 123.455); num = 123; Console.WriteLine(num.ToString("num=0"));//num=123 Console.WriteLine("-------------"); Console.WriteLine("#のテスト:無意味な0を表示しない"); //0に対応する位置に数字が入っていない場合、0が表示されます Console.WriteLine("{0:##.##}", 1.2);//1.2 Console.WriteLine("{0:##.##}", 001.200);//1.2 //小数点以下にある0の数が、小数点以下の表示桁数になります。はみ出した分は四捨五入 Console.WriteLine("{0:##.##}", 123.400); Console.WriteLine("{0:##.##}", 123.454); Console.WriteLine("{0:##.##}", 123.455); num = 123; Console.WriteLine(num.ToString("num=#")); num = 123456789; Console.WriteLine(num.ToString("(###)-###-###"));//(123)-456-789 Console.WriteLine(num.ToString("(###)-###"));//(123456)-789 Console.WriteLine(num.ToString("(###)-###-###-(###)"));//()-123-456-(789) Console.WriteLine("-------------"); Console.WriteLine(",(カンマ)のテスト:桁区切り"); Console.WriteLine("{0:#,#}", 123456789);//123,456,789 Console.WriteLine("{0:#,}千", 123456789);//123457千 Console.WriteLine("{0:#,,}百万", 123456789);//123百万 Console.WriteLine("{0:#,##0}", 123456); Console.WriteLine("{0:#,##0}", 1234.56); //1,235 Console.WriteLine("{0:#,##0}", 0.01);//0 Console.WriteLine("{0:#,##0.00}", 123456); Console.WriteLine("{0:#,##0.00}", 1234.56); Console.WriteLine("{0:#,##0.00}", 0.01); Console.WriteLine("{0:0##,##,##}", 123); Console.WriteLine("-------------"); Console.WriteLine("% のテスト:パーセント"); //%単体だと%の記号が表示されるだけ。(#や0などを使う) Console.WriteLine("{0:%}", 1.2);//%(不適切な設定) Console.WriteLine("{0:#%}", 1.2);//120% Console.WriteLine("{0:0%}", 1.2);//120% Console.WriteLine("{0:#%}", 001.200);//120% Console.WriteLine("{0:0%}", 001.200);//120% //小数点以下にある0の数が、小数点以下の表示桁数になります。はみ出した分は四捨五入 Console.WriteLine("{0:#.#%}", 0.12345);//12.3% Console.WriteLine("{0:0.0%}", 0.12345);//12.3% Console.WriteLine("-------------"); Console.WriteLine("‰ のテスト:パーミル"); //‰単体だと‰の記号が表示されるだけ。(#や0などを使う) Console.WriteLine("{0:‰}", 1.2);//‰(不適切な設定) Console.WriteLine("{0:#‰}", 1.2);//1200‰ Console.WriteLine("{0:0‰}", 1.2);//1200‰ Console.WriteLine("{0:#‰}", 001.200);//1200‰ Console.WriteLine("{0:0‰}", 001.200);//1200‰ //小数点以下にある0の数が、小数点以下の表示桁数になります。はみ出した分は四捨五入 Console.WriteLine("{0:#.#‰}", 0.12345);//123.5‰ Console.WriteLine("{0:0.0‰}", 0.12345);//123.5‰ Console.WriteLine("-------------"); // "E0"、"E+0"、"E-0"、"e0"、"e+0", "e-0"のどれかで書く Console.WriteLine("E0のテスト:指数表示"); //E+0単体だとE+0の記号が表示されるだけ。(#や0などを使う) Console.WriteLine("{0:E+0}", 1.2);//E+0(不適切な設定) Console.WriteLine("{0:#.#E0}", 123);//1.2E2 Console.WriteLine("{0:#.#e0}", 123);//1.2e2 Console.WriteLine("{0:#.#E-0}", 1.23E+20);//1.2E20 Console.WriteLine("{0:#.#E+0}", 1.23E+20);//1.2E+20//ここだけ違う Console.WriteLine("{0:#.#E0}", 1.23E+20);//1.2E20 Console.WriteLine("{0:#.#E-0}", 1.23E-20);//1.2E-20 Console.WriteLine("{0:#.#E+0}", 1.23E-20);//1.2E-20 Console.WriteLine("{0:#.#E0}", 1.23E-20);//1.2E-20 Console.WriteLine("-------------"); Console.WriteLine("\\のテスト:カスタム書式指定子を単なる文字として解釈"); // "#"、"0"、"."、","、"%"、"‰"に対して使用 Console.WriteLine("{0:000.##}", 12.45);//1.2 //エスケープシーケンスと勘違いされないようにするために、\は2つ必要。 Console.WriteLine("{0:\\#\\# 000.##}", 12.45);//1.2 //@を使い逐次的リテラル文字列として扱えば、\は1つで十分 Console.WriteLine(@"{0:\#\# 000.##}", 12.45);//1.2 //\はリテラル文字として認識されるようにするために Console.WriteLine("-------------"); Console.WriteLine(";のテスト:正・負・ゼロのそれぞれの場合で書式指定子を変更したい場合に使用"); //{正・負・ゼロ} Console.WriteLine("{0:##.##;}", 1.2);//1.2 Console.WriteLine("{0:##.##;}", -1.2);//-1.2 //{正・ゼロ;負} Console.WriteLine("{0:#0.##;00.00}", 1.2);//1.2 //マイナスが反映されないので注意 Console.WriteLine("{0:#0.##;00.00}", -1.2);//01.20 Console.WriteLine("{0:#0.##;00.00}", 0);//0 //{正;負;ゼロ} Console.WriteLine("{0:##.##;-00.00;ゼロです}", 1.2345);//1.23 Console.WriteLine("{0:##.##;-00.00;ゼロです}", -1.2345);//-01.23 Console.WriteLine("{0:##.##;-00.00;ゼロです}", 0);//ゼロです } } } |
実行結果
0のテスト:数字がない場合0を表示
01.20
123.45
123.46
num=123
————-
#のテスト:無意味な0を表示しない
1.2
1.2
123.4
123.45
123.46
num=123
(123)-456-789
(123456)-789
()-123-456-(789)
————-
,(カンマ)のテスト:桁区切り
123,456,789
123457千
123百万
123,456
1,235
0
123,456.00
1,234.56
0.01
0,000,123
————-
% のテスト:パーセント
%
120%
120%
120%
120%
12.3%
12.3%
————-
‰ のテスト:パーミル
‰
1200‰
1200‰
1200‰
1200‰
123.5‰
123.5‰
————-
E0のテスト:指数表示
E+0
1.2E2
1.2e2
1.2E20
1.2E+20
1.2E20
1.2E-20
1.2E-20
1.2E-20
————-
\のテスト:カスタム書式指定子を単なる文字として解釈
012.45
## 012.45
## 012.45
————-
;のテスト:正・負・ゼロのそれぞれの場合で書式指定子を変更したい場合に使用
1.2
-1.2
1.2
01.20
0
1.23
-01.23
ゼロです
関連記事
~ギャンブルに絶対儲かる必勝法があるのだろうか?~
私(サイト主)はこの疑問に対して非常に興味を持ち、プログラミングで検証してみました。
このサイトを応援してもいいかなと思う人はぜひとも購入を検討してみてください。