7.3.1. Типы String и ShortString
Несмотря на разницу во внутреннем представлении, короткие строки ShortString и длинные строки string имеют для программиста одинаковые свойства.
Текущую длину строки можно получить с помощью функции Length. Например, следующий оператор уничтожает все ведомые (хвостовые) пробелы:
while (Length(stS) о 0) and (stS[Length(stS)] = ' ' ) do
SetLentgh(stS, Length (stS) - 1);
В этом примере стандартная процедура setLength устанавливает новую длину строки. К строкам можно применять операцию “+” -сцепление, например:
stS := 'а' + 'b'; // stS содержит "ab"
stS := stS + ' с '; // stS содержит "abc"
Если длина сцепленной строки превысит максимально допустимую длину N короткой строки, то “лишние” символы отбрасываются. Следующая программа, например, выведет символ “I”:
Procedure TfmExamlpe.bbRunClick(Sender: TObject);
var
ssS: String[1];
begin
ssS := '123';
IbOutput := ssS;
end;
Операции отношения =, <>, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением #о.
Следующие операции отношения дадут значение True:
'''' < '.'
'А' > '1'
'Object' < ' Object Pascal'
'Пас' > 'Pasc al'
Все остальные действия над строками и символами реализуются с помощью описываемых ниже стандартных процедур и функций (в квадратных скобках указываются необязательные параметры).
Таблица 7.7. Процедуры и функции для работы со строками
Function AnsiLowerCase(const S: String ): String; |
Возвращает исходную строку S, в которой все заглавные буквы заменены на строчные в соответствии с национальной кодировкой Windows (т. е. с учетом кириллицы) |
|
Function AnsiUpperCase(const S: String ): String; |
Возвращает исходную строку s, в которой все строчные буквы заменены на заглавные в соответствии с национальной кодировкой Windows |
|
Function Concat(Sl [, S2, ..., SN]: String ): String; |
Возвращает строку, представляющую собой сцепление строк-параметров S1, S2, ... , SN |
|
Function Copy(St: String; Index, Count: Integer): String; |
Копирует из строки St count символов, начиная с символа с номером Index |
|
Procedure Delete(St: String; Index, Count:" Integers- |
Удаляет count символов из строки St, начиная с символа с номером index |
|
Procedure Insert(SubSt: String; St, Index: Integer); |
Вставляет подстроку SubSt в строку St, начиная с символа с номером Index |
|
Function Length(St: String): Integer; |
Возвращает текущую длину строки St |
|
Function LowerCase(const S:String): String; |
Возвращает исходную строку S, в которой все латинские заглавные буквы заменены на строчные |
|
procedure OleStrToStrVar(Source: PWideChar; var Dest:String) ; |
Копирует “широкую” (двухбайтную) строку в обычную строку Object Pascal |
|
Function Pos(SubSt, St:String): Integer;
|
Отыскивает в строке St первое вхождение подстроки SubSt и возвращает номер позиции, с которой она начинается. Если подстрока не найдена, возвращается ноль |
|
Procedure SetLength(St:String; NewLength: Integer);
|
Устанавливает новую (меньшую) длину NewLength строки St. если NewLength больше текущей длины строки, обращение к SetLength игнорируется |
|
function StringOfChar(Ch:Char; Count: Integer):String; |
Создает строку, состоящую из Count раз повторенного символа ch |
|
function StringToOleStr(const Source: String):PWideChar; |
Копирует обычную строку в двухбайтную |
|
function StringToWideChar(const Source: String; Dest:PWideChar; DestSize: Integer) : PWideChar; |
Преобразует обычную строку в строку с символами UNICODE |
|
Function Uppercase(const S:String): String; |
Возвращает исходную строку S, в которой все строчные латинские буквы заменены на заглавные |
|
Подпрограммы преобразования строк в другие типы |
||
Function StrToCurr(St: String): Currency; |
Преобразует символы строки St в целое число типа Currency. Строка не должна содержать ведущих или ведомых пробелов |
|
Function StrToDate(St: String): TDateTime; |
Преобразует символы строки St в дату. Строка должна содержать два или три числа, разделенных правильным для Windows разделителем даты (в русифицированной версии таким разделителем является “.”). Первое число - правильный день, второе - правильный месяц. Если указано третье число, оно должно задавать год в формате XX или ХХХХ. Если символы года отсутствуют, дата дополняется текущим годом. Например: DateToStr(StrToDate('28.06')) даст строку '28.06.99' (см. ниже пояснения) |
|
Function StrToDateTime(St: String): TDateTime;
|
Преобразует символы строки St в дату и время. Строка должна содержать правильную дату (см. StrToDate) и правильное время (см. StrToTime), разделенные пробелом, например: StrToDateTime('28.06 18:23') |
|
Function StrToFloat(St:String): Extended
|
Преобразует символы строки St в вещественное число. Строка не должна содержать ведущих или ведомых пробелов |
|
Function StrToInt(St:String): Integer; |
Преобразует символы строки St в целое число. Строка не должна содержать ведущих или ведомых пробелов |
|
Function StrToIntDef(St:String; Default: Integer):Integer;
|
Преобразует символы строки St в целое число. Если строка не содержит правильного представления целого числа, возвращается значение Default |
|
Function StrToIntRange(St:String; Min, Max: Longint):Lomgint; |
Преобразует символы строки St в целое число и возбуждает исключение ERangeError, если число выходит из заданного диапазона Min.. .мах |
|
Function StrToTime(St:String): TDateTime;
|
Преобразует символы строки St во время. Строка должна содержать два или три числа, разделенных правильным для Windows раздели телем времени (для русифицированной версии таким разделителем является “:”). Числа задают часы, минуты и, возможно, секунды. За послед ним числом через пробел могут следовать символы “am” или “рm”, указывающие на 12- часовой формат времени |
|
Procedure Val(St: String; var X; Code: Integer);
|
Преобразует строку символов St во внутреннее представление целой или вещественной переменной х, которое определяется типом этой переменной. Параметр Code содержит ноль, если преобразование прошло успешно, и тогда в х помещается результат преобразования, в противном случае он содержит номер позиции в строке St, где обнаружен ошибочный символ, и в этом случае содержимое х не меняется. В строке St могут быть ведущие и/или ведомые пробелы. Если St содержит символьное представление вещественного числа, разделителем целой и дробной частей должна быть точка независимо от того, каким символом этот разделитель указан в Windows |
|
Подпрограммы обратного преобразования |
||
Function DateTimeToStr(Value: TDateTime): String; Procedure DateTime-ToString(var St: String; Format: String;- Value: TData-Time); |
Преобразует дату и время из параметра в строку символов Преобразует дату и время из параметра value в строку St в соответствии со спецификаторами параметра Format (см. пояснения ниже) |
|
Function DateToStr(Value: TDateTime): String; |
Преобразует дату из параметра value в строку символов |
|
Function FloatToStr(Value: Extended): String; |
Преобразует вещественное значение value в строку символов. |
|
Function FloatToStrF(Value: Extended; Format: TFloatPor- mat; Precision, Digits: Inte ger) : String; |
Преобразует вещественное значение Value в строку символов с учетом формата Format и параметров precision и Digits (см. пояснения ниже). |
|
Function Format(const Format: String; const Args: array of const): Strings;
|
Преобразует произвольное количество аргументов открытого массива Args в строку в соответствии с форматом Format (см. пояснения ниже) |
|
Function FormatDateTime (Format: String; Value:.TDateTime): String; |
Преобразует дату и время из параметра value в строку символов в соответствии со спецификаторами параметра Format (см. пояснения ниже) |
|
Function FormatFloat(Format:String; Value: Extended): String; |
Преобразует вещественное значение value в строку символов с учетом спецификаторов формата Format (см. пояснения ниже) |
|
function IntToHex(Value: Integer; Digits: Integer):Strings; |
Преобразует целое число Value в строку символьного представления шестнадцатеричного формата: Digits - минимальное количество символов в строке |
|
Function IntToStr(Value: Integer) : String; |
Преобразует целое значение Value в строку символов |
|
Procedure Str(X [:Width[:Decimals]]; var St:String) ;
|
Преобразует число х любого вещественного илицелого типов в строку символов St; параметры width и Decimals, если они присутствуют, задают формат преобразования: width определяет общую ширину поля, выделенного под соответ ствующее символьное представление вещественного или целого числа х, a Decimals - количество символов в дробной части (этот параметр имеет смысл только в том случае, когда х -вещественное число) |
|
Function TimeToStr(Value: TDateTime): String; |
Преобразует время из параметра Value в строку символов |
При преобразовании с помощью функций StrToxxx строка может содержать недопустимые для типа ххх символы. В этом случае возбуждается исключительная ситуация EConvertError. При обратных преобразованиях xxxToStr формат получаемой строки зависит от установленных в Windows системных параметров: разделителей даты, времени, целой и дробной частей вещественного числа.
Примечание
Обычно разделителем групп разрядов в русской языке принято считать пробел. Однако в русифицированном варианте Windows для этих целей на самом деле используется, не пробел, а символ-#160, внешне похожий на пробел Убедиться: в, этом можно с помощью такой несложной программы:
procedure TfmExample.bbRunClick (Sender : TObject) ;
var S: String;
begin
S:=FloatToStrF(1000,ffNumber,4,0);
EdOutput.Yext:=IntToStr(Ord(S[2]));
end;
Если вы действительно хотите использовать пробел, его нужно явно указать в окошке. Разделитель: групп разрядов (Пуск.| Настройка | Панель управления | Язык и стандарты | Числа)
В Delphi 4...6 изменена функция StrToDate для того, чтобы упростить ввод двух цифр года с учетом смены столетия. С этой целью в модуле system введена глобальная переменная TwoDigitYearCenturywindow, которая определяет цифровой рубеж столетия. Если две цифры года больше или равны значению этой переменной, цифры года относятся к текущему столетию, если меньше - переносятся в следующее. Пусть, например, TwoDigitYearCenturywindow содержит значение 50. Тогда любые две цифры года в диапазоне 00..49 дополняются базой 2000 (2000, 2001,...,2049), в то время как цифры в диапазоне 50..99 дополняются базой 1900 (1950, 1951,...,1999). Такой прием позволяет в известной мере смягчить проблему двухцифровых годов на рубеже столетия, однако полным ее решением будет, разумеется переход на четырехцифровое представление года. По умолчанию TwoDigitYearCenturywindow имеет значение 0, и поэтому любые две цифры года дополняются базой 1900.
Используемая в процедуре DateTimeToString и в функции FormatDateTime строка Format может содержать такие символы-спецификаторы (в примерах показаны строки для времени 19 часов 45 минут и даты 8 июня 1999 года):
Таблица 7.8. Спецификаторы формата даты/времени
с
|
Отображает сначала дату в формате дд.мм.гг, затем пробел и время в формате чч.мм. ее: 08.06. 99 19:45 |
d |
Отображает день без ведущего нуля: 8 |
dd |
Отображает день с ведущим нулем: 0 8 |
dddd |
Отображает день недели: воскресенье (для нерусифицированной версии Windows - Sunday) |
ddddd |
Отображает дату в формате дд. мм. гг: 08.06.99 |
dddddd |
Отображает дату в формате д Месяц год: 8 Июнь 1999 (для нерусифицированной версии Windows - 8 June 1999) |
m |
Отображает число месяца без ведущего нуля: 6 |
mm |
Отображает число месяца с ведущим нулем: 06 |
nunm |
Отображает сокращенное название месяца: июн. |
nuninm |
Отображает полное название месяца: Июнь |
у или уу |
Отображает две последние цифры года: 9 9 |
ууу или уууу |
Отображает все цифры года: 1999 |
h |
Отображает час без ведущего нуля: 19 |
hh |
Отображает час с ведущим нулем: 19 |
n |
Отображает минуты без ведущего нуля: 4 5 |
nn |
Отображает минуты с ведущим нулем: 4 5 |
s |
Отображает секунды без ведущего нуля: 0 |
ss |
Отображает секунды с ведущим нулем: 00 |
t |
Отображает время в формате чч:лш: 19:45 |
tt |
Отображает время в формате чч:мм:сс: 19:45:00 |
am/pm |
Отображает время в 12-часовом формате (am - до полудня, pm - после полудня). Для спецификаторов hh: mm am/pm получим 07:45 pm |
ampm |
Отображает время в 12-часовом формате, но без указания до/после полудня. Для спецификаторов hh: mm ampm получим 07:45 |
a/p |
Отображает время в 12-часовом формате (а - до полудня, р - после полудня). Для спецификаторов hh: mm a/p получим 07:45 р |
/ |
Отображает используемый в Windows разделитель даты. Для спецификаторов d/m/у получим 8. 6. 99 |
: |
Отображает используемый в Windows разделитель времени. Для спецификаторов h:n: s получим 19:45:0 |
Замечу, что любые другие символы, указанные в строке Format, a также заключенные в апострофы или кавычки специальные символы-спецификаторы помещаются в выходную строку без преобразования, поэтому спецификаторы 'h час n мин' дадут строку 19 час 45 мин, а 'h час "n" мин' - 19час n мин.
При форматном преобразовании времени-даты или других типов в строку и обратно могут пригодиться следующие системные переменные.
Таблица 7.9. Системные переменные, управляющие стандартным отображением данных
CurrencyString: String;
|
Символ или символы денежной единицы; для русифицированной Windows ими являются символы “р. ” |
CurrencyFormat: Byte;
|
Определяет положение символов денежной единицы: 0 - $1; 1 - 1$; 2 - $ 1; 3 - 1 $; в русифицированной Windows используется формат 1 (1р.) |
NegCurrFormat: Byte; |
Определяет формат отрицательной суммы: 0 = ($1); 1 = -$1; 2 = S-1; 3 = $1-; 4 = (1$); 5 = -1$; 6 = 1-$; 7 =1$-; 8=-!$; 9=-$!; 10=1 $-; 11 =$1-; 12=$-!; 13= 1- $; 14 = (S 1); 15 = (1 $); в русифицированной Windows используется формат 5 (-lp.) |
ThousandSeparator: Char; |
Разделитель тысяч; в русифицированной Windows используется символ #166 |
DecimalSeparator: Char; |
Разделитель дробной и целой частей числа (', ') |
CurrencyDecimals: Byte;
|
Количество цифр после запятой в денежном формате. Обычно содержит 0, что блокирует вывод мелкой денежной единицы. Чтобы в сумме присут ствовали не только рубли, но и копейки, в переменную следует установить значение 2 |
DateSeparator: Char; |
Разделитель даты; в русифицированной Windows используется ' . ' |
ShortDateFormat: String;
|
Обычно используется формат ' dd. mm. уу ', что соответствует, например, дате '31.05.00'. По скольку на рубеже столетий цифры года в таком формате кажутся неверными, я советую в начале каждой программы вставлять оператор Short-DateFormat := 'dd. mm. yyyy'; это даст '31.05.2000' |
LongDateFormat: String; |
Для русифицированной версии содержит символы 'dd MMMM yyyy г.',что дает'31 Май 2000 г. ' |
TimeSeparator: Char; |
Разделитель времени (' : ') |
TimeAMString: String;
|
Символы 12-часового формата для времени до полудня (не используются в русифицированной версии Windows) |
TimePMString: String;
|
Символы 12-часового формата для времени после полудня (не используются в русифицированной версии Windows) |
ShortTimeFormat: String; |
Краткий формат времени (обычно ' h: mm ') |
LongTimeFormat: String; |
Полный формат времени (обычно ' hh: mm: ss ') |
ShortMonthNames: array [1..12] of String; |
Краткие имена месяцев (янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек) |
LongMonthNames: array [1..12] of String; |
Полные имена месяцев (Январь, Февраль, Март, Апрель, Май, Июнь, Июль, Август, Сентябрь, Октябрь, Ноябрь, Декабрь) |
ShortDayNames: array [1..7] of String; |
Краткие имена дней недели (Вс, Пн, Вт, Ср, Чт, Пт, Сб) |
LongDayNames: array [1..7] of String;
|
Полные имена дней недели (воскресенье, понедельник, вторник, среда, четверг, пятница, суббота) |
type TSysLocale = packed record DefaultLCID: LCID; PriLangID: LANGID; SubLangID: LANGID; FarEast: Boolean; MiddleEast: Boolean; end; var SysLocale: TSysLocale; |
Определяет локализацию Windows: DefaultLCID- идентификатор локализации (1049); PriLangID- идентификатор первичного языка (25); SubLangID - идентификатор вторичного языка (если в качестве второго языка используется английский (США), это поле имеет значение 1); Far-East - локализация для Дальнего Востока (False): MiddleEast - локализация для Среднего Востока(False) |
EraNames: array [1..7] of String; |
Используется в функции DateTimeToStr в Windows для Ближнего Востока |
EraYearOffsets: array [1..7] of Integer; |
Используется в функции DateTimeToStr в Windows для Ближнего Востока |
TListSeparator: Char; |
Разделитель списка строк ('; ') |
Например, многие бухгалтерские программы в западных странах используют еженедельный отчет. В этом случае может пригодиться следующая подпрограмма, которая по заданной дате возвращает год, номер недели от его начала, дату понедельника и дату воскресенья:
procedure WeekToDates(aDate: TDateTime;
var Week: Byte;
var Year: Word;
var FirstDate, LastDate: TDateTime);
{Возвращает для указанной даты aDate год Year, номер недели от начала года Week, а также даты начала и конца недели} var
S: String;
begin
//Получаем в S символы года для даты aDate:
DateTimeToString(S,'yyyy',aDate) ;
//Формируем дату 1 января:
FirstDate := StrTo-Date('01'+DateSeparator+'01'+DateSeparator+S) ;
Year := StrToInt(S); //Возвращаем год
//Формируем последнюю дату 1-й недели:
LastDate := FirstDate;
DateTimeToString(S,'dddd',LastDate) ;
while SOLongDayNames [1] do
// LongDayNames [1 ]= 'воскресенье '
begin
LastDate := LastDate+1;
DateTimeToString(S,'dddd',LastDate);
end;
Week := 1;
//Циклически наращиваем FirstDate, LastDate и Week, пока
// LastDate не станет больше или равна aDate:
while LastDate<aDate do
begin
inc(Week);
FirstDate := FirstDate+7;
LastDate := LastDate+7
end
end; // WeekToDates
Для форматного преобразования вещественных чисел предназначены функции FloatToStrF и FormatFloat. Первая использует значение Format перечисляемого типа TFloatFormat и два дополнительных параметра - Precision и Digits. Правила использования параду метров функции FloatToStrF показаны в следующей таблице' (примеры преобразования даются для value = П = 3,141593654, Precision = 5 и Digits = 2):
Таблица 7.10. Правила использования параметров функции FloatToStrF
Значение Format |
Описание |
ffExponent |
Научная форма представления с множителем ехх (“умножить на 10 в степени XX”). precision задает общее количество десятичных цифр мантиссы, Digits - количество цифр в десятичном порядке хх. Число округляется с учетом первой отбрасываемой цифры:3,1416Е+00 |
ff Fixed |
Формат с фиксированным положением разделителя целой и дробной частей, precision задает общее количество десятичных цифр в представлении числа. Digits - количество цифр в дробной части. Число округляется с учетом первой отбрасываемой цифры:3,14 |
ff General |
Универсальный формат, использующий наиболее удобную для чтения форму представления вещественного числа. Соответствует формату ff Fixed, если количество цифр в целой части меньше или равно precision, а само число - больше или равно 0,00001, в противном случае соответствует формату ff Exponent: 3,1416 |
ffNumber |
Отличается от ffFixed использованием символа-разделителя тысяч при выводе больших чисел (для русифицированной версии Windows таким разделителем является пробел). Для value = П *1000 получим 3 141,60 |
ffCurrency |
Денежный формат. Соответствует ffNumber, но в конце строки ставится символ денежной единицы (для русифицированной версии Windows - символы “р.”). Для value = я*1000 получим 3 141,60р. |
Параметр Format в функции FormatFloat может содержать такие спецификаторы:
Таблица 7.11. Спецификаторы форматирования вещественных чисел
; |
Разделитель спецификаторов формата для положительного, отрицательного и нулевого числа |
0 |
Определяет поле для цифры. Если в данной позиции форматируемое число имеет значащую цифру, она выводится, если нет - выводится 0 |
# |
Определяет поле для цифры. Если в данной позиции форматируемое число имеет значащую цифру, она выводится, если нет - ничего не выводится |
. |
Поле для разделителя целой и дробной частей числа |
, |
Поле для разделителя тысяч |
E+,e+ E-,e- |
Признак представления числа в научном формате. В этом случае число представляется мантиссой и десятичным порядком, между которыми стоит символ Е. Спецификаторы е+ и е+ предписывают выводить знак + перед неотрицательным десятичным порядком, при использовании Е- и е- знак + перед порядком не выводится |
Как и в случае даты/времени, любые другие символы строки Format, а также заключенные в апострофы или кавычки специальные символы-спецификаторы помещаются в выходную строку без преобразования: для value = 71*1000 спецификаторы'#, рубля' дадут строку 3 142 рубля. С помощью символа “;” можно задавать различные формы представления положительного, отрицательного и нулевого числа. При этом набор спецификаторов без “;” относится ко всем числам; если используется один символ “;”, то спецификаторы слева от него применяются для форматирования положительных чисел, справа - отрицательных, а вывод нулей подавляется; при использовании двух символов “; ” первый набор - для положительных, второй - для отрицательных и третий - для нулевых чисел. Например, спецификаторы '#;нуль' для value = -1 выведут нуль, а для value = о ничего не выведут, в то время как спецификаторы '#;00;нуль' для value = -1 выведут 01, а для value = 0 - строку нуль. Спецификаторы '#;;нуль' для value = -1 выведут -1, т. к. в этом случае спецификатор для отрицательных чисел не задан и для их вывода будет использован спецификатор положительных чисел, в то время как спецификаторы '#; ;нуль' подавляют вывод отрицательных чисел.
Мощная функция преобразования Format (табл. 7.7) перешла в Object Pascal из языка Си. Она позволяет преобразовать сразу несколько элементов открытого массива аргументов в соответствии с указаниями форматирующей строки. Например, Format('Строка "%s" содержит %d символов',['Паскаль',7]) даст такой результат: Строка "Паскаль" содержит 7 символов.
Элементами массива аргументов могут быть константы и/или переменные целого и вещественного типа, строки и указатели.
Форматирующая строка - это произвольная строка, в которую в любом месте можно вставить форматирующий спецификатор. Количество форматирующих спецификаторов должно быть не больше количества элементов массива аргументов - в противном случае возникнет исключительная ситуация. Каждому элементу массива аргументов по порядку их перечисления в конструкторе массива функция ставит в соответствие форматирующий спецификатор по порядку его следования в форматирующей строке: первому аргументу - первый спецификатор, второму - второй и т. д. Если количество спецификаторов меньше количества аргументов, “лишние” аргументы игнорируются.
Форматирующий спецификатор всегда начинается символом процента и в общем случае имеет такую структуру (в квадратных скобках указываются необязательные элементы):
"%" [index ":"] ["-"] [width] ["." prec] type
Здесь: index ":" - индекс открытого массива, с помощью этого элемента можно явно указать аргумент, который будет обрабатывать спецификатор; "-" указывает на необходимость прижать отформатированный спецификатором текст к левой границе отведенного для него пространства; width - число, определяющее количество символов для обработанного спецификатором текста; если это число меньше требуемого, этот элемент спецификатора игнорируется, если больше - дополняется справа (если есть элемент "-") или слева (если он отсутствует) нужным количеством пробелов; "." prec - задает точность представления целых и вещественных типов; type - символ, определяющий тип форматирования (см. таблицу ниже).
Таблица 7.12. Форматирующие спецификаторы для функции Format
d
|
Целое десятичное число. Если задан параметр ргес, то символьное представле ние должно содержать по меньшей мере ргес десятичных цифр: если символьное представление содержит меньше цифр, оно дополняется слева символами 0, если больше - параметр ргес игнорируется. Если аргумент не является целым числом, возникает исключительная ситуация |
u |
Беззнаковое целое число. Используется подобно типу d, но аргумент должен быть положительным числом. Если аргумент - отрицательное целое, результат форматирования непредсказуем |
е
|
Вещественное число в экспоненциальном представлении: символьное представление имеет вид -d, dddddddddddE+ddd. Если число положительное, ведущий минус опускается, а если его модуль меньше 1, знак плюс меняется на минус. Всегда содержит одну цифру целой части, по меньшей мере одну цифру дробной части и не меньше трех цифр десятичного порядка. Если задан параметр точности, он определяет общее количество цифр до символа Е, но не меньше двух: если параметр точности содержит 1 или 0, он заменяется на 2. Если символьное представление содержит больше символов, чем ргес, оно округляется по первой отбрасываемой цифре. Умалчиваемое значение параметра точности 15 |
f
|
Вещественное число в виде -ddd, ddd (фиксированное представление). Параметр точности (по умолчанию 2) указывает количество цифр в дробной части. Если он 0, выводится только целая часть числа |
g
|
Вещественное число в максимально коротком представлении (экспоненциальном или фиксированном). Параметр точности (по умолчанию 15) определяет максимальное количество значащих разрядов. Если число имеет меньшее количество цифр, оно не дополняется до ргес, а если число не имеет дробной части, оно выводится как целое (без запятой) |
n |
Соответствует фиксированному представлению, но использует символ-разделитель тысяч |
m |
Денежное представление вещественного числа. Подобно типу n, но справа ставится знак денежной единицы |
p |
Указатель. Выводит содержимое указателя в виде 8 шестнадцатеричных цифр |
s |
Аргумент должен быть символом, строкой или строкой с терминальным нулем. Параметр точности, если указан, определяет максимальную длину строки: если строка больше, она усекается, если меньше - параметр точности игнорируется |
x |
Шестнадцатеричное представление целого числа. Параметр точности определяет минимальное количество шестнадцатеричных цифр (если число меньше, оно дополняется ведущими нулями) |
Функция не чувствительна к высоте букв, указывающих тип преобразования. Параметры index, ргес и width задаются явно (числами в форматирующей строке) или неявно - с помощью символа “*”. В этом случае в качестве параметра берется значение очередного аргумента в списке аргументов (он должен быть целым числом). Например, два следующих обращения дадут одинаковый результат:
Format ('%*.*f, [8, 2, 123.456]);
Format ('%8.2f, [123.456]);