書式を指定して数値を文字列に変換する方法(C#)

  • このエントリーをはてなブックマークに追加

スポンサーリンク

※サイト運営にサーバーは必須です※
ロリポップ! はコスパのよい初心者向けサーバーです~

目次

書式指定について

数値を文字へ変換の際に、書式を定めたい場合があります。

例えば、日本円を扱うのであれば、先頭に「\」(円マーク)を付けたいといった要望が考えられます。

他にも、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

ソースコード

実行結果

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 指数表示
\ カスタム書式指定子を単なる文字として解釈
;(セミコロン) 正・負・ゼロの場合に対してそれぞれ異なる書式指定子を指定したい時に使用

詳しく知りたい場合は:
https://msdn.microsoft.com/ja-jp/library/0c899ak8(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-9

ソースコード

実行結果

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
ゼロです

関連記事

~ギャンブルに絶対儲かる必勝法があるのだろうか?~

私(サイト主)はこの疑問に対して非常に興味を持ち、プログラミングで検証してみました。

このサイトを応援してもいいかなと思う人はぜひとも購入を検討してみてください。

ギャンブルの必勝法が本当に儲かるかプログラミングで検証してみた

     

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)