Mor*_*mie 5 database delphi vcl string-formatting tfield
这是我的程序。
procedure format_integer_field(Atable: TDataSet);
var i: integer;
begin
if Atable.Active then
if Atable.FieldCount > 0 then
with Atable do
begin
for i:= 0 to FieldCount-1 do
if (Fields[i] is TIntegerField) then
begin
(Fields[i] as TIntegerField).DisplayFormat := '###,###';
(Fields[i] as TIntegerField).EditFormat := '#';
end
else
if (Fields[i] is TFloatField) then
begin
(Fields[i] as TFloatField).DisplayFormat := '###,###.##';
(Fields[i] as TFloatField).EditFormat := '#.##';
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
在输入“0.9”之类的数字并且结果为“.9”之前,这一切正常。如何在小于“1”的浮点数之前有千位分隔符和零。
尝试 (Fields[i] as TFloatField).DisplayFormat := '##0,000.00';
正如您在http://docwiki.embarcadero.com/RADStudio/XE3/en/Using_Default_Formatting_for_Numeric,_Date,_and_Time_Fields上的文档中阅读的那样
默认格式化由以下例程执行:
- FormatFloat -- TFloatField, TCurrencyField
以及您如何阅读以下文档页面
文档引用
- 0 -> 数字占位符。如果正在格式化的值在格式字符串中出现“0”的位置有一个数字,则该数字将被复制到输出字符串中。否则,“0”将存储在输出字符串中的该位置。
- # -> 数字占位符。如果正在格式化的值在格式字符串中出现“#”的位置有一个数字,则该数字将被复制到输出字符串中。否则,输出字符串中的该位置不会存储任何内容。
因此,通过在格式化模式中使用“#”,您告诉 Delphi“我不需要任何数字(和千位分隔符)在这个地方,但如果你愿意,你可以放置它们” - 因为 Delphi 不想放置前导零 - 你没有。但是,如果你真的需要这些数字和千位分隔符,你可以用“0”代替“#”,这样你就告诉 Delphi“数字只需要在这里,不管你想不想放它们”