5

This is my procedure.

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;

This is work fine until a number like "0.9" has been entered and result will be ".9". How can I have thousand separator and zero before floating point that smaller than "1".

4

2 回答 2

5

尝试 (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“数字只需要在这里,无论您是否想输入它们”

于 2014-01-28T08:00:13.553 回答
4

你需要的格式是###,##0.0#

于 2014-02-04T11:31:27.947 回答