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に表示
しています。
何かヒントでもご存知あれば、お教え下さい、
よろしくお願いします。
引数の型が整数でないか、式の結果が整数値でない可能性はありませんか。
とりあえずIntegerでキャストしてみるとか。
失礼しました。上のコメントは勘違いです、無視してください。
編集 削除> 第3引数が#のみなので、0の時空白になると思うのですが
> 0がそのまま表示されてしまいます。
0の時に何も表示したくないなら、単に第3引数の'#'を削って空白にすれば良いんじゃないでしょうか。
ちなみに、書式文字 # の定義は、その位置に数字があれば表示する、なければ表示しない、です。
例えば10について考えると、3桁目には数字がありませんが2桁目には「1」、1桁目には「0」という数字があります。これが「10」になるのはいいですよね。
同様に1という数は、2桁目や3桁目には数字がありませんが1桁目には「1」という数字があります。
同様に0という数は、2桁目や3桁目には数字がありませんが1桁目には「0」という数字があります。
したがって'#'で「0」が表示されても間違いとは言えない
というか、論理的にはそちらが正しいと思うのですが……何にしても解釈次第で、仕様があいまいだということですね。
ヒントになるか、わかりませんが・・・・
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)
tor,igyさん、回答有難う御座います。
DELPHI-XE2になってゼロサプレスが正しく行われないようでしたので
こちらで質問させて頂きました。
Delphi2010では、#で0は空白表示されていたんです。
XE2でそれがされない・・・なぜかな?です。
また、’#、’とし、値が1000の場合の表示も
2010では、1,000
XE2 では、1,000.
と「.」ピリオドが入ります。
私の環境だけですかね、Update4にしているのですが・・・
結果は、torさんの第3引数に空白を設定して表示されましたので、
解決にしたいと思います。
あ〜修正が大変だ;;
あいがとうございました。