Опубликован: 07.04.2008 | Уровень: специалист | Доступ: платный
Лекция 15:

Преобразования типов

< Лекция 14 || Лекция 15: 12 || Лекция 16 >
Аннотация: В этой лекции вы познакомитесь с функциями преобразования одних типов данных в другие, научитесь создавать сложные выражения путем подстановки значений, познакомитесь с глобальной переменной DecimalSeparator и напишете приложение с серьезной защитой от некорректного ввода пользователем числа.

Преобразования типов

В любом языке программирования то и дело приходится преобразовывать один тип данных в другой. К примеру, нам требуется, чтобы пользователь ввел денежную сумму. Для этого нужно использовать вещественное число с учетом того, что могут быть копейки. Однако нет компонентов, которые позволят сразу ввести вещественное число, приходится пользоваться теми компонентами, которые позволяют ввести вещественное число в виде строки:

'123456,78'

Пользователь воспринимает это так, будто вводит сразу цифры, однако мы то знаем, что это строка только символов, изображающая число. И чтобы действительно превратить ее в число, приходится использовать преобразования типов. Некоторыми функциями, которые служат этим целям, мы уже пользовались, давайте упорядочим эти знания и изучим новые функции.

IntToStr()

Наиболее часто используемая функция. Как вы уже знаете, она принимает в качестве параметра целое число, и возвращает его в виде строки. Хотелось бы отметить еще одну особенность: эта функция предназначена для любого целого числа, не обязательно Integer. Если у вас есть переменная Byte, Word, Cardinal или Int64, все это переменные целого типа, и для любой из них годится функция IntToStr().

Примеры использования:

var
   b : Byte;
   w : Word;
   i : Integer;
begin
   b := 5;
   w := 10;
   i := 20;
   Edit1.Text := IntToStr(b);
   Edit2.Text := IntToStr(w);
   ShowMessage(IntToStr(i));
end;

StrToInt()

Эта функция напротив, принимает в качестве параметра строку, изображающую целое число, и возвращает его в виде целого числа. Все, что было сказано о типах данных в функции IntToStr(), справедливо и для этой функции. Примеры использования:

var
   b : Byte;
   w : Word;
   i : Integer;
begin
  b := StrToInt(Edit1.Text); //внимание! Если пользователь введет число 
                             //больше 255, произойдет ошибка!
  w := StrToInt('50000');
  i := StrToInt(Edit2.Text);
end;

Как видите, действия этих функций очень похожи, только в последнем случае приходится применять осторожность, чтобы не превысить диапазон возможных значений. Если вы заранее не знаете, какое число введет пользователь, лучше использовать Integer или Cardinal, если число без знака. Экономия памяти иной раз может вызвать серьезные ошибки в программе.

FloatToStr()

Эта функция принимает в качестве параметра вещественное число (то есть, число с запятой), и возвращает его в виде строки. Примеры применения почти аналогичны функции IntToStr(), однако есть одна особенность – если после запятой у Вас есть только нули, то функция вернет строку в виде целого числа:

s := FloatToStr(125,00); // результат: '125'

Эта функция также предназначена для всех типов вещественных чисел.

StrToFloat()

Эта функция принимает в качестве параметра строку в виде вещественного или целого числа, и возвращает это вещественное число. Пример:

f := StrToFloat('125'); //результат: 125,0

FormatFloat()

Эта функция по своему предназначению похожа на функцию FloatToStr(), однако она является гораздо более мощным инструментом. Эта функция не только возвращает вещественное число в качестве строки, но еще и позволяет задать желаемый формат этой строки. В прошлых примерах мы говорили, что функция FloatToStr() вместо строки '125,00' выведет '125'. А если нужно все-таки '125,00'? Такое сплошь и рядом встречается, особенно в финансовой документации. Для этих целей и создана функция FormatFloat.

Она имеет два параметра – строку формата и само число. Строка может содержать следующие форматы:

Таблица 15.1. Возможные форматы FormatFloat()
Строка, указываемая в формате Примеры чисел
1234 -1234 0,5 0
0 1234 -1234 1 0
0.00 1234,00 -1234,00 0,50 0,00
#.## 1234 -1234 0,5 0
#,0.00 1 234,00 -1 234,00 0,50 0,00

Есть и другие варианты форматов, например, для представления числа в экспонентной форме, но они, как правило, не используются.

Поясним строку форматов подробней.

В первом случае показаны варианты возвращаемых строк, если строка форматов вообще не указана.

"Решетка" (#) работает также, как "ноль", с той разницей, что если на этом месте не окажется цифры, то "решетка" ничего не выведет, а "ноль" подставит в это место ноль.

Знак запятая здесь указывают для удобного отображения разрядности числа. Например, миллион будет выглядеть как строка '1 000 000'. Заметим, что на само число этот формат не оказывает никакого влияния, он нужен только для того, чтобы выводить число в удобочитаемой форме в виде строки.

Примеры использования:

var
   f : Real;
begin
   f := 1234567,00;
   ShowMessage(FormatFloat('0,000.00' ,f)); //результат: "1 234 567,00"
   ShowMessage(FormatFloat(f)); //результат: "1234567"
end;
< Лекция 14 || Лекция 15: 12 || Лекция 16 >
Виктор Пелих
Виктор Пелих

Здравствуйте.
Прохожу курс "Введение в программирование на Delphi"
Добрался до Лекции 29: Введение в базы данных.

Установлена RAD Studio 11.3, у которой отсутствует вкладка BDE и, соответственно, компонент Table,  который обеспечивает доступ к таблице средствами механизма BDE.
Поиск в интернете подсказал 
BDE Installer for RAD Studio, Delphi, C++Builder 10.3 Rio
Подскажите, имеется ли ещё возможность использовать механизм BDE в Delphi11 и если такая возможность есть, как подключить BDE к Delphi11?
С уважением...

 

Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

как я получу диплом о профессиональной переподготовке?

Данила Некрасов
Данила Некрасов
Россия, Пермь, ПНИПУ
Сергей Федоров
Сергей Федоров
Россия