18 Март 2010 – 19:41
Недавно делал одну лабу для друга на Delphi. Так вот там надо было проверять, введено ли дробное число в TEdit или же там какая-нибудь чушь. Я предложил использовать стандартную функцию TryStrToFloat, что он и сделал. Как оказалось, даже препод по программированию в колледже не знает такой функции, что меня, конечно, поразило. Можно юзать и try … except, но не проще ли и выгоднее заюзать эту функцию, кстати написанную на чистом асме? Посему думаю совсем немного рассказать о таких функциях в Delphi, которые проверяют возможность конвертирования из одного типа перепенной в другой:
Функция TryStrToFloat находится в стандартном модуле SysUtils.pas. При вызове ей передаются в большинстве случаев два параметра: строка типа String и переменная типа Double, куда будет записываться результат. В случае, если строку можно конвертировать в тип Double, функция возвращает true, в ином случае будет false.
Существуют 4 варианта вызова функции:
function TryStrToFloat(
const S: String;
out Value: Single
):Boolean;
function TryStrToFloat(
const S: String;
out Value: Single;
const FormatSettings: TFormatSettings
):Boolean;
function TryStrToFloat(
const S: String;
out Value: Double
):Boolean;
function TryStrToFloat(
const S: String;
out Value: Double;
const FormatSettings: TFormatSettings
):Boolean;
Каждый из них позволяет по-разному (TFormatSettings) работать с различными типами переменных (Double или Single). Пример использования функции TryStrToFloat:
...
var Tmp: Double;
begin
if not TryStrToFloat(Edit1.Text, Tmp) then
ShowMessage(’Error! Cant convert!’) else ShowMessage(’Can convert!’);
end;
Аналогично существуют и используются функции TryStrToInt (из строки в целое число), TryStrToBool (из строки в булевое), TryStrToInt64 (из строки в 64-битное число), TryFloatToCurr (Double в тип Currency - тип с плавающей запятой с 4 десятичными числами), TryStrToCurr (строку в Currency), TryFloatToDateTime (число с плавающей точкой в переменную типа TDateTime), TryStrToDate (строку в переменную типа TDate) и TryStrToTime (строку в тип TTime). Их так же можно найти в модуле SysUtils.pas
Написано в Кодинг, Мысли | 12 комментариев »