2007年02月22日
川俣晶の縁側ソフトウェア技術雑記total 3798 count

分かったような分からないような.NET Frameworkの書式指定がやっと分かった!

Written By: 川俣 晶連絡先

 一応分かっているはずなのに、どうも居心地が悪いというか、明確にスパッと説明できないというか、そういう気持ちを感じていた.NET Frameworkの書式指定がやっと明確に理解できた気がします。

 ここでいう書式指定とは、Console.WriteLineやstring.Formatで使うものです。

事例を見る §

Console.WriteLine("A{0,11:C2}B", 12345.1234);

 を実行すると、以下の結果が得られます。(バックスラッシュが見えるかもしれないけど、本当は円記号だよ!)

A \12,345.12B

 さて、この書式指定の意味を説明します。

 最初のAと最後のBは、最初と最後を明示するために入れた通常文字なので、深い意味はありません。{……}の中括弧も、書式指定を囲むためのお約束の記号で深い意味はありません。問題はその中身です。

 まず、"0"は、パラメータリストの最初の値を対象にすることを示します。

 次に、",11"は11桁の揃えて出力することを指定しています。この値は10桁なので、1桁余りますので、その分だけ手前に空白が詰められています。Aの後ろの空白がそれです。

 最後に":C2"というのは、Cが"通貨表記カンマ区切り"を示す書式指定文字です。そして、Cの後ろの2は小数点以下の桁数を示す数値です。Cの効能として先頭に通貨記号(日本では円記号、バックスラッシュに見えても円だと思って読んでください)が付きます。

この表記のどこに罠があるのか? §

 実はこの書式は1つの書式仕様によって構成されたものではありません。C2は書式指定、その他は複合書式指定という別の機能によって実現されています。つまり、C2の部分とその他の部分は、解説しているページが全く異なっています。当然のことながら、ここに出てくる全体の桁数11の根拠と、小数部の桁数の2の根拠も、全く違うページに書かれています。

 ですから、ここには以下の2つの罠があると言えます。

  • 一続きの書式指定に見えるにもかかわらず、仕様書の一カ所だけで全体を把握できない
  • 特に桁数の指定の説明が全体桁数と小数部の桁数で分離してしまっているのは、Cや古いBASICの書式指定に馴染んでいると直感的に分かりにくい

感想 §

 いや~。

 分かったような分からないような曖昧な部分を解消して、やっとすっきりしました。

 ちなみに、この書式指定には奥深い合理性があると感じます。1つの値の書式化と、複数の値の書式化の問題を明確に分離して扱うことで、柔軟性や拡張性が高くなっているのではないかと思います。

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2007年
02月
22日
WinFormsのControl.Invoke メソッドでオブジェクトの配列のみを引数に渡すと実行時エラーになる問題
3days 0 count
total 5629 count
【技術雑記】の前のコンテンツ
2007年
02月
01日
クララが立った! PowerShellもVistaで動いた!
3days 0 count
total 4143 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20070222005053
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.