Массив
Delphi: функция format (пример,
форматирование, преобразование в шестнадцатеричную систему)
Предположим, мы хотим преобразовать число в строку, например,
для того, что бы вывести его на экран. Ну, хотя бы в таком простом случае, как
отобразить результат вычисления:
procedure
TForm1.btnCalkClick(Sender: TObject);
begin
lbResult.Caption:=FloatToStr(123/456);
end; |
Вот что выдаст компьютер при выполнении этого кода:
Но как быть, если нам нужно вывести не кучу знаков после
запятой, а всего лишь три? Как вариант, можно использовать функцию
format.
procedure
TForm1.btnCalkClick(Sender: TObject);
begin
lbResult.Caption:=Format('Результат
%.3n',[123/456]);
end; |
При нажатии на кнопку программа у нас покажет вот это:
В Delphi функция
Format,
обеспечивает 'C' подобное форматирование множества простых типов данных в строке.
В качестве первого параметра этой функции мы указываем форматную
строку, а в качестве второго - множество параметра (то что внутри []).
В простых условиях
каждые данные, форматирующие подстроку начинаются с % и заканчиваются
индикатором типа данных:
d = Десятичное (целое число)
e = Научный
f = Установленный
g = Генерал
m = Деньги
n = Число (плавающее)
p = Указатель
s = Строка
u = Десятичное число без знака
x = Шестнадцатеричный
Рассмотрим пример:
procedure
TForm1.btnCalkClick(Sender: TObject);
var i:integer;
begin
i:=123;
lbResult.Caption:=Format('%d в
десятичном это %x в шестнадцатиричном',[i,i]);
end; |
Вот что нам выдаст программа:
Общий формат форматирования каждой
подстроки следующий:
%[Index:][-][Width][.Precision]Type
где квадратные
скобки относятся к дополнительным параметрам, и :. - символы - литералы, первые
2 из которых используются, чтобы идентифицировать два из дополнительных
параметров.
Рассмотрим еще пример:
procedure
TForm1.btnCalkClick(Sender: TObject);
begin
lbResult.Caption:=Format('%.4f',[123.456]);
end; |
И вот что нам выдаст программа:
А теперь рассмотрим пример, демонстрирующий все форматы
функции format. Сналала положим на форму комонент
TListBox (он находиться на закладке Standart).
Назовем этот компонент lbFormatDemo.
Затем добавим кнопочку и создадим обработчик событий OnClick:
procedure
TfrmFormatDemo.btnStartClick(Sender: TObject);
var
text : string;
begin
//
Только 1 элемент данных
lbFormatDemo.Items.Add(Format('%s', ['Hello']));
//
Соединение символьного текста и элемента данных
lbFormatDemo.Items.Add(Format('String = %s', ['Hello']));
// Примеры каждого из типов данных
lbFormatDemo.Items.Add(Format('Decimal = %d',
[-123]));
lbFormatDemo.Items.Add(Format('Exponent = %e',
[12345.678]));
lbFormatDemo.Items.Add(Format('Fixed = %f',
[12345.678]));
lbFormatDemo.Items.Add(Format('General = %g',
[12345.678]));
lbFormatDemo.Items.Add(Format('Number = %n',
[12345.678]));
lbFormatDemo.Items.Add(Format('Money = %m',
[12345.678]));
lbFormatDemo.Items.Add(Format('Pointer = %p', [addr(text)]));
lbFormatDemo.Items.Add(Format('String = %s', ['Hello']));
lbFormatDemo.Items.Add(Format('Unsigned decimal = %u',
[123]));
lbFormatDemo.Items.Add(Format('Hexadecimal = %x',
[140]));
end; |
вот что выдаст программа, когда мы нажмем на кнопочку:
А вот еще пример с использование ширины, индекса и значений
точности:
procedure
TfrmFormatDemo.btnStartClick(Sender: TObject);
begin
// Значение ширины диктует размер вывода
// с пробелом,
добавляющемся слева
// Обратите внимание
<>, символы добавляются, чтобы показать форматирование
lbFormatDemo.Items.Add(Format('Padded decimal = <%7d>',
[1234]));
// С '-' оператором, данные выравниваются влево
lbFormatDemo.Items.Add(Format('Justified decimal =
<%-7d>', [1234]));
// Значение точности вынуждает 0 дополнений к
желательному размеру
lbFormatDemo.Items.Add(Format('0 padded decimal =
<%.6d>', [1234]));
// Комбинация ширины и точности
// Обратите внимание,
что значение ширины предшествует значению точности
lbFormatDemo.Items.Add(Format('Width + precision =
<%8.6d>', [1234]));
// Индексное значение позволяет следующему
значению в массиве
// данных быть
измененным
lbFormatDemo.Items.Add(Format('Reposition after 3
strings = %s %s %s %1:s %s',['Zero',
'One', 'Two',
'Three']));
// Обратите внимание, испытание показало, что *
для параметра ширины
// может привести к
ECONVERTERROR.
lbFormatDemo.Items.Add(Format('In line = <%10.4d>',
[1234]));
lbFormatDemo.Items.Add(Format('Part
data driven = <%*.4d>', [10, 1234]));
lbFormatDemo.Items.Add(Format('Data driven = <%*.*d>', [10, 4, 1234]));
end; |
|