Delphi TFloatField.DisplayFormat для числовых полей менее 1,0
Это моя процедура.
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;
Это нормально работает до тех пор, пока не будет введено число типа "0,9", а результатом будет ".9". Как я могу иметь разделитель тысяч и ноль перед плавающей точкой, которая меньше, чем "1".
2 ответа
Пытаться (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
А как ты это прочитал на следующих страницах документации
- http://docwiki.embarcadero.com/Libraries/XE3/en/System.SysUtils.FormatFloat
- http://docwiki.embarcadero.com/Libraries/XE3/en/Data.DB.TNumericField.DisplayFormat
цитаты из документации
- 0 -> Цифровой заполнитель. Если форматируемое значение имеет цифру в позиции, где в строке формата появляется "0", то эта цифра копируется в выходную строку. В противном случае "0" сохраняется в этой позиции в выходной строке.
- # -> Цифровой заполнитель. Если форматируемое значение имеет цифру в позиции, где в строке форматирования появляется "#", то эта цифра копируется в выходную строку. В противном случае, ничего не сохраняется в этой позиции в выходной строке.
Таким образом, используя "#" в шаблоне форматирования, вы говорите Delphi: "Мне не нужны никакие цифры (и тысячи разделителей с ними) в этом месте, но вы можете поместить их, если хотите", - и поскольку Delphi не хочет ставить ведущие нули - у вас их нет. Однако, если вам действительно нужны эти цифры и разделитель тысяч с ними, вы ставите "0" вместо "#" и таким образом говорите Delphi "цифры просто должны быть здесь, хотите ли вы их ставить или нет"