Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delphi TFloatField.DisplayFormat for numeric fields less than 1.0

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".

like image 796
Morteza Samie Avatar asked Jan 28 '14 07:01

Morteza Samie


2 Answers

Try (Fields[i] as TFloatField).DisplayFormat := '##0,000.00';

As you did read in documentation at http://docwiki.embarcadero.com/RADStudio/XE3/en/Using_Default_Formatting_for_Numeric,_Date,_and_Time_Fields it says

Default formatting is performed by the following routines:

  • FormatFloat -- TFloatField, TCurrencyField

And how you did read in the following documentation pages

  • http://docwiki.embarcadero.com/Libraries/XE3/en/System.SysUtils.FormatFloat
  • http://docwiki.embarcadero.com/Libraries/XE3/en/Data.DB.TNumericField.DisplayFormat

the documentation quotes

  • 0 -> Digit placeholder. If the value being formatted has a digit in the position where '0' appears in the format string, then that digit is copied to the output string. Otherwise, a '0' is stored in that position in the output string.
  • # -> Digit placeholder. If the value being formatted has a digit in the position where '#' appears in the format string, then that digit is copied to the output string. Otherwise, nothing is stored in that position in the output string.

So by using "#" in the formatting pattern you tell Delphi "i do not need any digits (and thousands separators with them) in this place, but you might put them if you want" - and since Delphi does not want to put leading zeros - you don't have any. However, if you really need those digits and the thousands separator with them, you put "0" instead of "#" and that way you tell Delphi "the digits just need to be here, whether you want to put them or not"

like image 100
Arioch 'The Avatar answered Oct 05 '22 11:10

Arioch 'The


The format you need is ###,##0.0#

like image 35
Hugh Jones Avatar answered Oct 05 '22 11:10

Hugh Jones