Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


【Delphi】数値を書式設定した文字列にする方法

Delphi/400で数値を書式設定した文字列にするには、FormatFloat関数を利用します。

数値で保持しているデータを、0詰めや、小数点の定義、金額の表示のような
3ケタ区切りのカンマを付けた文字列にするなど、様々な書式に変換することができます。

また、IBMiでは日付を8ケタの数値形式で保存している場合が多いため、
FormatFloat関数を利用して、日付形式の文字列にする場合にもよく利用されます。

FormatFloat関数
 書式を指定して数値を文字列に変換する。
 function FormatFloat(const Format:string, Value:Extended):string;
  ・第1引数 string型:書式化文字列
  ・第2引数 Extended型:文字列に変換する数値

(公式ドキュメント)
System.SysUtils.FormatFloat - RAD Studio API Documentation

 

第一引数には、様々な書式指定子が設定できます。

[0]は、その桁の値の数字か、値がない場合には、0が代わりに入ります。例えば、0詰め等に利用します。
[#]を指定すると、その桁の値がある場合に数字が入りますが、ない場合には何も表示されません。

例) [0]と[#]の違いの例

Edit1.Text := FormatFloat('#####', value);
  valueが1234  結果 -> 1234
  valueが0     結果 -> [なにも表示されません]    
Edit2.Text := FormatFloat('00000', value);
  valueが1234 結果 -> 01234
  valueが0    結果 -> 00000
Edit3.Text := FormatFloat('####0', value)
  valueが1234 結果 -> 1234
  valueが0    結果 -> 0

 
その他にも、以下のような書式にすることもできます。

例) 金額などカンマ区切りで表示する例
Edit1.Text := FormatFloat('0,', 1234);
結果 -> 1,234
例) 小数第2位まで表示する例
Edit1.Text := FormatFloat('0.00', 123.4);
結果 -> 123.40
例) 数値8桁の値を日付形式(0000/00/00)に表示する例
Edit1.Text := FormatFloat('0000/00/00', 20120910);
結果 -> 2012/09/10
例) 書式に固定文字を含める例( '' または "" で囲みます)
Edit1.Text := FormatFloat('"#"00', 5);
結果 -> #05

 

FormatFloat関数では、正の値、負の値、および 0ごとに、異なる書式を指定することもできます。
書式を分けるには、第1引数の書式文字列を ; (セミコロン)で区切り、セクションを分けます。

例えば、セクションが1つの場合には、書式文字列はすべての数に適用されます。

FormatFloat('すべての値', value);

セクションが2つの場合には、第1セクションを正の値および0に適用し、第2セクションは負の値に適用されます。

FormatFloat('正の値および0;負の値', value);

セクションが3つの場合には、第1セクションは正の数に、第2セクションは負の値に、第3セクションは 0に適用されます。

FormatFloat('正の値;負の値;0', value);
例) セクションを3つ設定した場合の例
Edit1.Text := FormatFloat('0.00;▲0.00;ZERO', value); 
  valueが 123 正の値の場合   結果 -> 123.00
  valueが -123 負の値の場合  結果 -> ▲123.00
  valueが 0 の場合           結果 -> ZERO

 
例のようなEdit等のコンポーネント以外にも、同様の使い方ができます。
(数値フィールドのDisplayFormatプロパティなども同様に設定できます。)
数値の書式を設定したい場合に、FormatFloat関数をご利用ください。

 

 

(ミガロ.情報マガジン「MIGARO News!!」Vol.142 2012年9月号より)