DiaplayFormatが正しく反映されない?

解決


GTR  2012-04-25 15:52:41  No: 42045  IP: 192.*.*.*

DELPHI−XE2,Windows7-64bit,Oracle10.2Gの環境で開発しております。

早速の質問なのですが、
DBGridに数値をカンマをつけて表示しているのですが
正しく(思い通りに)表示されません。

プログラム上で
TNumericField(Query1.FieldByName('A')).DisplayFormat
                                           := '#,##0;-#,##0;#';
のように、書式指定しています。
第3引数が#のみなので、0の時空白になると思うのですが
0がそのまま表示されてしまいます。

Delphi2010では、上記書式で0は空白で表示されるのですが・・・

データベースへはDBEXPRESS内のTDBConnection,TSimpleDataSetを使用し
データを抽出、TDataSourceにTSimpleDataSetを関連付けしDBGIDに表示
しています。

何かヒントでもご存知あれば、お教え下さい、
よろしくお願いします。

編集 削除
Nov  2012-04-26 12:09:12  No: 42046  IP: 192.*.*.*

引数の型が整数でないか、式の結果が整数値でない可能性はありませんか。
とりあえずIntegerでキャストしてみるとか。

編集 削除
Nov  2012-04-26 13:21:58  No: 42047  IP: 192.*.*.*

失礼しました。上のコメントは勘違いです、無視してください。

編集 削除
tor  2012-04-26 21:50:36  No: 42048  IP: 192.*.*.*

> 第3引数が#のみなので、0の時空白になると思うのですが
> 0がそのまま表示されてしまいます。
0の時に何も表示したくないなら、単に第3引数の'#'を削って空白にすれば良いんじゃないでしょうか。

ちなみに、書式文字 # の定義は、その位置に数字があれば表示する、なければ表示しない、です。
例えば10について考えると、3桁目には数字がありませんが2桁目には「1」、1桁目には「0」という数字があります。これが「10」になるのはいいですよね。
同様に1という数は、2桁目や3桁目には数字がありませんが1桁目には「1」という数字があります。
同様に0という数は、2桁目や3桁目には数字がありませんが1桁目には「0」という数字があります。
したがって'#'で「0」が表示されても間違いとは言えない
というか、論理的にはそちらが正しいと思うのですが……何にしても解釈次第で、仕様があいまいだということですね。

編集 削除
igy  2012-04-26 22:26:35  No: 42049  IP: 192.*.*.*

ヒントになるか、わかりませんが・・・・

Paradox形式のDBにTTable - TDataSource- TDBGrid で接続し、
整数型のフィールドに対し、TTableの項目を設定して
TSmallIntFieldのDiplayFormatプロパティ に

#,##0;;#
#,##0;;      (tor さんが書かれたように、末尾は半角空白)
#,##0;;ZERO

で試したところ、値が0の場合、DBGridには

#,##0;;#      =>  何も表示しない
#,##0;;       =>  何も表示しない
#,##0;;ZERO   =>  'ZERO'と表示

と、期待通りの結果になりました。

また、FormatFloatを使って、

ShowMessage(FormatFloat('#,##0;;#', 0) + #13#10 +
            FormatFloat('#,##0;; ', 0) + #13#10 +
            FormatFloat('#,##0;;ZERO', 0));

のようにテストしても、同じく期待通りの結果になりました。


Delphi XE2 Update4, Windows7 (32bit)

編集 削除
GTR  2012-04-27 10:36:43  No: 42050  IP: 192.*.*.*

tor,igyさん、回答有難う御座います。

DELPHI-XE2になってゼロサプレスが正しく行われないようでしたので
こちらで質問させて頂きました。
Delphi2010では、#で0は空白表示されていたんです。
XE2でそれがされない・・・なぜかな?です。

また、’#、’とし、値が1000の場合の表示も
2010では、1,000
XE2 では、1,000.
と「.」ピリオドが入ります。

私の環境だけですかね、Update4にしているのですが・・・

結果は、torさんの第3引数に空白を設定して表示されましたので、
解決にしたいと思います。
あ〜修正が大変だ;;

あいがとうございました。

編集 削除