我对DELPHI写的几个基类型

2016-02-19 18:24 5 1 收藏

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的我对DELPHI写的几个基类型,手机电脑控们准备好了吗?一起看过来吧!

【 tulaoshi.com - 编程语言 】

 

  //用惯JAVA或C#的人可能对DELPHI非常生气,连基本的类型都没有,我平时工作中,经常会曾试着把一些函数集合在一起,也经常做一些属于自己的基础类型的函数,此处把它们弄出来,有不当之处,请大家点评.
  unit BaseClass;

  interface

  uses
    SysUtils, Classes, StrUtils, IdGlobal, Math;

  type
    TCharSet = set of char;
  var
    TNormalCharSet: TCharSet = [#13, #10, #32, '.', ',', ';'];
  type

    TString = class
    private
      FText: string;
    public
      function CharAt(APosition: Integer): Char;
        //指定位置的字母
      function toLowerCase: string; overload;
      class function toLowerCase(AString: string): string; overload;
        //小写

      function toUpperCase: string; overload;
      class function toUpperCase(AString: string): string; overload;
        //大写

      class function ValueOf(AValue: string): Boolean; overload;
      class function ValueOf(AValue: Boolean): string; overload;

      class function StringIn(AValue: string; AValues: array of string): Boolean;

      class function Left(AValue: string; ALength: Integer): string;
      class function Right(AValue: string; ALength: Integer): string;

      class function DeletePrefix(AValue: string; FixedString: TCharSet = [#32]): string; //删除前缀
      class function DeleteSuffix(AValue: string; FixedString: TCharSet = [#32]): string; //删除后缀
      //
      class function CompareString(AValue1: string; AValue2: string): Boolean;

      class function HashCode(AValue: string): Integer;

      class function LastChar(AValue: string): Char;

      class function StringReplace(const S, OldPattern, NewPattern: string;
                     Flags: TReplaceFlags): string;
      class function StringOfChar(Ch: Char; Count: Integer): string;

      class function SetString(var s: string; buffer: PChar; len: Integer): string;

      class function GetPy(AStr: string): string;
            //得到对应的拼音.
      class function IsAllChinese(AStr: string): Boolean;
      class function IsAllEnglish(AStr: string): Boolean;

      class function GetFirstWord(AValue: string; var AWord: string; ASeparator: TCharSet): Integer; overload;

      class function GetFirstWord(AValue: string; var AWord: string; ASeparator: string): Integer; overload;
                     //返回值为从开始到该单据的长度。

      class function GetAllWord(AValue: string; ASeparator: string): TStringList; overload;
                     //返回所有的关键字。使用完后,请将结果集Free;
                     //注:在以后的使用中,请不要使用该函数。请使用它的重载版
                     //GetAllWord(AValue: string; ASeparator: string; AStringList: TStringList);
      class procedure GetAllWord(AValue: string; ASeparator: string; AStringList: TStrings); overload;
                     //把所有的结果集装入AStringList;

      class procedure GetAllWordWithAll(AValue: string; ASeparator: string; AStringList: TStrings);
      class function StringToCharSet(AValue: string): TCharSet;
      class function CharSetToString(AValue: TCharSet): string;

      class function UpdateSentence(AOldString: string; //被操作字符串
                                    AUpdateSource: string; //查找的单词。
                                    AUpdateString: string; //替换的单据。
                                    ASentenceSeparator: string; //句子分隔符。
                                    AWordSeparator: string  //单据分隔符;
                                    ): string; //返回结果。
         //如 ' dbarcode ASC, dname DESC', 'dbarcode', '', ',', ' '的返回值为
              //' dname DESC';

      class function DeleteRepeat(AOldString: string;          //要处理字符
                                  ADeleteString: Char;         //要删除的字符
                                  ARepeat: Char): string;      //重复字符

      class function IfThen(AExpression: Boolean; ATrue: string; AFalse: string): string;
                     //根据表达式的值,返回相应的字符串。
      class function AbsoluteToRelate(AAbsolute: string; ACurrent: string): string;
                     //给定两个文件,将绝对路径转换成相对路径。
      class function RelateToAbsolute(ARelate: string; ACurrent: string): string;
      class function SimilarPosition(AOne, ATwo: string): Integer;

      class function GetCharNum(AString: string; AChar: Char): Integer;

      class function IndexOf(AString, ASubString: string): Integer;

      class function ZeroToInt(AString: string): Integer;
      class function ZeroToFloat(AString: string): Double;

      class function ZeroToStr(AString: string): string;

      class function SameText(AString, AString1: string): Boolean;

      class function Reverse(AString: string): string;

      class function IsValidIP(const S: String): Boolean;

      class function FillString(AChar: Char; ALength: Integer): string;

      class function StuffString(const AText: string; AStart, ALength: Cardinal;
         const ASubText: string): string;

      class function GetNextString(var SourceString: string; ASplitChar: string): string;
    end;

    //整型类。
    TInteger = class
      class function IntToStr(AInteger: Integer): string; overload;
      class function IntToStr(AInteger: Int64): string; overload;

      class function IsValidInt(AString: string): Boolean;
      class function IsValidInt64(AString: string): Boolean;

      class function MaxInt: Integer;
      class function MaxLongInt: Integer;
      class function HashCode(AInteger: Integer): Integer;

      class function IntToBin(AInteger: Cardinal): string;
      class function IntToHex(AInteger: Integer): string;

      class function HexToInt(AString: string): Integer;
      class function MakeSerialNo(AInteger: Integer; ADigit: Integer): string;
    end;

    TFloat = class
      class function IsValidFloat(AString: string): Boolean;
      class function MaxDouble: Double;
      class function MinDouble: Double;
      class function MaxExtended: Extended;
      class function MinExtended: Extended;

      class function SameValue(const A, B: Single; Epsilon: Single = 0): Boolean; overload;
      class function SameValue(const A, B: Double; Epsilon: Double = 0): Boolean; overload;
      class function SameValue(const A, B: Extended; Epsilon: Extended = 0): Boolean; overload;

      class function FloatToMoney(const Value: Double; Round: Boolean = True): string;
    end;

    TBoolean = class
      class function BoolToStr(ABoolean: Boolean): string;
      class function StrToBool(AString: string): Boolean;  //如果不为'true'则为false;
    end;
  implementation

  { TString }
  function GetPYIndexChar(AChar: string): Char;
  begin
    case WORD(AChar[1]) shl 8 + WORD(AChar[2]) of
      $B0A1..$B0C4: Result := 'A';
      $B0C5..$B2C0: Result := 'B';
      $B2C1..$B4ED: Result := 'C';
      $B4EE..$B6E9: Result := 'D';
      $B6EA..$B7A1: Result := 'E';
      $B7A2..$B8C0: Result := 'F';
      $B8C1..$B9FD: Result := 'G';
      $B9FE..$BBF6: Result := 'H';
      $BBF7..$BFA5: Result := 'J';
      $BFA6..$C0AB: Result := 'K';
      $C0AC..$C2E7: Result := 'L';
      $C2E8..$C4C2: Result := 'M';
      $C4C3..$C5B5: Result := 'N';
      $C5B6..$C5BD: Result := 'O';
      $C5BE..$C6D9: Result := 'P';
      $C6DA..$C8BA: Result := 'Q';
      $C8BB..$C8F5: Result := 'R';
      $C8F6..$CBF9: Result := 'S';
      $CBFA..$CDD9: Result := 'T';
      $CDDA..$CEF3: Result := 'W';
      $CEF4..$D188: Result := 'X';
      $D1B9..$D4D0: Result := 'Y';
      $D4D1..$D7F9: Result := 'Z';
    else
      Result := Char(0);
    end;
  end;

  class function TString.GetPy(AStr: string): string;
  var
    I: Integer;
  begin
    Result := '';
    for I := 1 to Length(AStr) do
    begin

      if ByteType(AStr, i) = mbTrailByte then
        Result := Result + GetPYIndexChar(AStr[i - 1] + AStr[i])
      else
        if ByteType(AStr, i) = mbSingleByte then
          Result := Result + AStr[i];
    end;

  end;

  function TString.CharAt(APosition: Integer): Char;
  begin
    Result := FText[APosition];
  end;

  class function TString.CharSetToString(AValue: TCharSet): string;
  begin

  end;

  class function TString.CompareString(AValue1, AValue2: string): Boolean;
  begin
    Result := UpperCase(AValue1) = UpperCase(AValue2);
  end;

  class function TString.DeletePrefix(AValue: string;
    FixedString: TCharSet): string;
  begin
    while System.Length(AValue) 0 do
    begin
      if AValue[1] in FixedString then
        Delete(AValue, 1, 1)
      else
        Break;
    end;
    Result := AValue;
  end;

  class function TString.GetFirstWord(AValue: string; var AWord: string; ASeparator: TCharSet
    ): Integer;
  var
    tmpStr: string;
    tmpPos: Integer;
  begin
    tmpStr := DeleteSuffix(AValue, ASeparator);
    tmpStr := DeletePrefix(AValue, ASeparator);

    Result := Length(AValue) - Length(tmpStr);
  {  if Length(tmpStr) = 0 then Exit;

    if (tmpStr[1] = '''') and (tmpStr[2] = '''')then
    begin
      for tmpPos := 3 to Length(tmpStr) do
      begin
        if tmpStr[tmpPos] in [''''] then
          Break;
      end;
    end;

    if tmpPos 3 then tmpPos :=tmpPos + 2;
  }
    for tmpPos := 1 to Length(tmpStr) do
    begin
      if tmpStr[tmpPos] in ASeparator then
        Break;
    end;

    tmpPos := tmpPos -1;

  //  {TODO : -oghs 修复最后一个参数解析不正确}
    if (tmpPos = 0) and (AValue '') then
      tmpPos := Length(AValue);

    AWord := Copy(AValue, Result + 1, tmpPos);

    Result := Result + tmpPos;
  end;

  class function TString.HashCode(AValue: string): Integer;
  var
    i: Integer;
    tmpValue: Integer;
  begin
    tmpValue := 0;
    for I := 1 to System.Length(AValue) do
    begin
      tmpValue := 3 * tmpValue + Ord(AValue[I]);
    end;
    Result := tmpValue;
  end;

  class function TString.IsAllChinese(AStr: string): Boolean;
  var
    I: Integer;
  begin
    Result := True;
    for I := 1 to Length(AStr) do
    begin
      if ByteType(AStr, I) = mbSingleByte then
      begin
        Result := False;
        Break;
      end;
    end;
  end;

  class function TString.IsAllEnglish(AStr: string): Boolean;
  var
    I: Integer;
  begin
    Result := True;
    for I := 1 to Length(AStr) do
    begin
      if ByteType(AStr, I) mbSingleByte then
      begin
        Result := False;
        Break;
      end;
    end;
  end;

  class function TString.LastChar(AValue: string): Char;
  begin
    Result := AValue[System.Length(AValue)];
  end;

  class function TString.Left(AValue: string; ALength: Integer): string;
  begin
    Result := Copy(AValue, 1, ALength);
  end;

  class function TString.Right(AValue: string; ALength: Integer): string;
  begin
    Result := StrUtils.RightStr(AValue, ALength);
  end;

  class function TString.SetString(var s: string; buffer: PChar;
    len: Integer): string;
  begin
    System.SetString(s, buffer, len);
    Result := s;
  end;

  class function TString.StringIn(AValue: string;
     AValues: array of string): Boolean;
  var
    I: Integer;
  begin
    Result := False;
    for I := Low(AValues) to High(AValues) do
    begin
      if UpperCase(AValue) = UpperCase(AValues[I]) then
      begin
        Result := True;
        Break;
      end;
    end;
  end;

  class function TString.StringOfChar(Ch: Char; Count: Integer): string;
  begin
    Result := System.StringOfChar(Ch, Count);
  end;

  class function TString.StringReplace(const S, OldPattern,
    NewPattern: string; Flags: TReplaceFlags): string;
  begin
    Result := Sysutils.StringReplace(S, OldPattern, NewPattern, Flags);
  end;

  class function TString.StringToCharSet(AValue: string): TCharSet;
  var
    I: Integer;
  begin
    Result := [];
    for I := 1 to Length(AValue) do
    begin
      Result := Result + [AValue[I]];
    end;   
  end;

  function TString.toLowerCase: string;
  begin
    Result := LowerCase(FText);
  end;

  function TString.toUpperCase: string;
  begin
    Result := Uppercase(FText);
  end;

  class function TString.ValueOf(AValue: Boolean): string;
  begin
    if AValue then
      Result := '是'
    else
      Result := '否';
  end;

  class function TString.ValueOf(AValue: string): Boolean;
  begin
    Result := StringIn(AValue, ['是', 'yes', 'ok']);
  end;

  class function TString.GetFirstWord(AValue: string; var AWord: string;
    ASeparator: string): Integer;
  begin
    Result := GetFirstWord(AValue, AWord, StringToCharSet(ASeparator));
  end;

  class function TString.GetAllWord(AValue, ASeparator: string): TStringList;
  var
    tmpList: TStringList;
    tmpWord: string;
  begin
    tmpList := TStringList.Create;
    while Length(AValue) 0 do
    begin
      tmpWord := '';
      Delete(AValue, 1, GetFirstWord(AValue, tmpWord, ASeparator));
      if tmpWord '' then
        tmpList.Add(tmpWord)
      else
        Break;
    end;
    Result := tmpList;
  end;

  class function TString.UpdateSentence(AOldString, AUpdateSource,
    AUpdateString, ASentenceSeparator, AWordSeparator: string): string;
  var
    tmpSentence: string;
    tmpWord: string;
    tmpWord1: string;
    i: Integer;
    tmpResult: string;
  begin
    //得到第一个句子
    tmpSentence := AOldString;
    tmpResult := '';
    while Length(tmpSentence) 0 do
    begin
      i := GetFirstWord(tmpSentence, tmpWord, ASentenceSeparator);
      tmpResult := tmpResult + Left(tmpSentence, i - Length(tmpWord));
      Delete(tmpSentence, 1, I);
      if tmpWord '' then
      begin
        i := GetFirstWord(tmpWord, tmpWord1, AWordSeparator);
        tmpResult := tmpResult + Left(tmpWord, i - Length(tmpWord1));
        if CompareString(tmpWord1, AUpdateSource) then
        begin
          tmpResult := tmpResult + AUpdateString;
        end
        else
        begin
          tmpResult := tmpResult + tmpWord;
        end;
      end;
    end;
    tmpResult := DeletePrefix(tmpResult, [' ', ',']);
    tmpResult := DeleteSuffix(tmpResult, [' ', ',']);
    tmpResult := DeleteRepeat(tmpResult, ',', ' ');
    tmpResult := DeleteRepeat(tmpResult, ' ', ' ');
    Result := tmpResult;

  end;

  class function TString.DeleteRepeat(AOldString: string; ADeleteString,
    ARepeat: Char): string;
  var
    I: Integer;
    tmpfind1: Boolean;
  begin
    tmpfind1 := False;
    for I := Length(AOldString) downto 1 do
    begin
      if tmpfind1 then
      begin
        if AOldString[I] = ADeleteString then
          Delete(AOldString, I, 1)
        else
        begin
          if AOldString[I] = ARepeat then
          Continue;
          tmpfind1 := AOldString[I] = ADeleteString;
        end;
      end
      else
      begin
        if ADeleteString ARepeat then
          if AOldString[I] = ARepeat then
            Continue;
         
        tmpfind1 := AOldString[I] = ADeleteString
      end;
    end;
    Result := AOldString;
  end;

  class function TString.DeleteSuffix(AValue: string;
    FixedString: TCharSet): string;
  begin
    while System.Length(AValue) 0 do
    begin
      if AValue[System.Length(AValue)] in FixedString then
        Delete(AValue, System.Length(AValue), 1)
      else
        Break;
    end;
    Result := AValue;
  end;

  class procedure TString.GetAllWord(AValue, ASeparator: string;
    AStringList: TStrings);
  var
    tmpWord: string;
  begin
    if AStringList = nil then
      AStringList := TStringList.Create;

    while Length(AValue) 0 do
    begin
      tmpWord := '';
      Delete(AValue, 1, GetFirstWord(AValue, tmpWord, ASeparator));
      if tmpWord '' then
        AStringList.Add(tmpWord)
      else
        Break;
    end;

  end;

  class function TString.IfThen(AExpression: Boolean; ATrue,
    AFalse: string): string;
  begin
    if AExpression then
      Result := ATrue
    else
      Result := AFalse;   
  end;

  class function TString.AbsoluteToRelate(AAbsolute,
    ACurrent: string): string;
  var
    tmpSimilarString: string;
    AOldFile: string;
    i: Integer;
    tmpPos: Integer;
  begin
    //转换后形成 ....a.ini;
  //如果不在同一个驱动器上,则直接返回绝对路径.
    if ExtractFileDrive(AAbsolute) ExtractFileDrive(ACurrent) then
      Result := AAbsolute
    else
    begin
      tmpSimilarString := '';
      AOldFile := AAbsolute;
      AAbsolute := ExtractFilePath(AAbsolute);
      tmpPos := SimilarPosition(AAbsolute, ACurrent);
      Delete(AOldFile, 1, tmpPos - 1);
      Delete(ACurrent, 1, tmpPos - 1);
      for i := 0 to GetCharNum(ACurrent, '') -1 do
      begin
        tmpSimilarString := tmpSimilarString + '..';
      end;
      Result := tmpSimilarString + AOldFile;
    end;
  end;

  class function TString.RelateToAbsolute(ARelate, ACurrent: string): string;
  var
    tmpSimilarString: string;
    tmpRootCount: Integer;
    i: Integer;
  begin
    if Length(ARelate) 2 then
    begin
      if ARelate[2] = ':' then
      begin
        Result := ARelate;
        Exit;
      end;
    end;

    tmpSimilarString := '';
    tmpRootCount := 0;
    while True do
    begin
      if LeftStr(ARelate, 3) = '..' then
      begin
        Inc(tmpRootCount);
        Delete(ARelate, 1, 3);
      end
      else
        break;
    end;

    tmpSimilarString := ReverseString(ExtractFilePath(ACurrent));
    for i := 0 to tmpRootCount do
    begin
      Delete(tmpSimilarString, 1, Pos('', tmpSimilarString));
    end;

    Result := ReverseString(tmpSimilarString) + ARelate;
  end;

  class function TString.SimilarPosition(AOne, ATwo: string): Integer;
  var
    i: Integer;
    Max: Integer;
  begin
    if Length(AOne) Length(ATwo) then
      Max := Length(AOne)
    else
      Max := Length(ATwo);
    for i := 1 to Max do
    begin
      if AOne[i] ATwo[i] then
        Break;
    end;
    Result := i;
  end;

  class function TString.GetCharNum(AString: string; AChar: Char): Integer;
  var
    i: Integer;
  begin
    Result := 0;
    for i := 1 to Length(AString) do
    begin
      if AString[i] = AChar then
        Inc(Result);
    end;
  end;

  class procedure TString.GetAllWordWithAll(AValue, ASeparator: string;
    AStringList: TStrings);
  var
    tmpI: Integer;
    tmpPos: Integer;
  begin
    if AStringList = nil then
      AStringList := TStringList.Create;

    tmpPos := 0;
    while Length(AValue) 0 do
    begin
      for tmpI := 1 to Length(AValue) do
      begin
        tmpPos := Pos(AValue[tmpPos], ASeparator);
        if tmpPos 0 then
        begin
          AStringList.Add(Copy(AValue, 1, tmpPos - 1));
          AStringList.Add(Copy(AValue, tmpPos, 1));
          Delete(AValue, 1, tmpPos);
          Break;
        end
      end;

    end;    // while
   
  end;

  class function TString.toLowerCase(AString: string): string;
  begin
    Result := LowerCase(AString);
  end;

  class function TString.toUpperCase(AString: string): string;
  begin
    Result := Uppercase(AString);
  end;

  class function TString.IndexOf(AString, ASubString: string): Integer;
  begin
    Result := Pos(ASubstring, AString);
  end;

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  class function TString.ZeroToInt(AString: string): Integer;
  begin
    if Trim(AString) = '' then
      AString := '0';

    Result := StrToInt(AString);
  end;

  class function TString.ZeroToFloat(AString: string): Double;
  begin
    if Trim(AString) = '' then
      AString := '0.0';
    Result := StrToFloat(AString);   
  end;

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  class function TString.SameText(AString, AString1: string): Boolean;
  begin
    Result := SysUtils.SameText(AString, AString1);
  end;

  class function TString.Reverse(AString: string): string;
  begin
    Result := ReverseString(AString);
  end;

  class function TString.IsValidIP(const S: String): Boolean;
  var
    j, i: Integer;
    LTmp: String;
  begin
    Result := True;
    LTmp := Trim(S);
    for i := 1 to 4 do begin
      j := StrToIntDef(Fetch(LTmp, '.'), -1);   
      Result := Result and (j -1) and (j 256);
      if NOT Result then begin
        Break;
      end;
    end;
  end;

  class function TString.ZeroToStr(AString: string): string;
  begin
    if Trim(AString) = '' then
      Result := '0'
    else
      Result := AString;
  end;

  class function TString.FillString(AChar: Char; ALength: Integer): string;
  var
    i: Integer;
  begin
    Result := '';
    for I := 1 to ALength do    // Iterate
    begin
      Result := Result + AChar;
    end;    // for
  end;

  class function TString.StuffString(const AText: string; AStart,
    ALength: Cardinal; const ASubText: string): string;
  begin
    Result := StrUtils.StuffString(AText, AStart, ALength, ASubText);
  end;

  class function TString.GetNextString(var SourceString: string;
    ASplitChar: string): string;
  var
    tmpPos: Integer;
  begin
    tmpPos := Pos(ASplitChar, SourceString);
    if tmpPos = 0 then
    begin
      Result := SourceString;
      SourceString := ''
    end
    else
    begin
      Result := TString.Left(SourceString, tmpPos -1);
      Delete(SourceString, 1, tmpPos);
    end;
  end;

  { TInteger }

  class function TInteger.IntToStr(AInteger: Integer): string;
  begin
    Result := Sysutils.IntToStr(AInteger);
  end;

  class function TInteger.HashCode(AInteger: Integer): Integer;
  begin
    Result := AInteger;
  end;

  class function TInteger.IntToStr(AInteger: Int64): string;
  begin
    Result := Sysutils.IntToStr(AInteger);
  end;

  class function TInteger.IsValidInt(AString: string): Boolean;
  begin
    Result := True;
    try
      StrToInt(AString);
    except
      Result := False;
    end;
  end;

  class function TInteger.IsValidInt64(AString: string): Boolean;
  begin
    Result := True;
    try
      StrToInt(AString);
    except
      Result := False;
    end;
  end;

  class function TInteger.MaxInt: Integer;
  begin
    Result := System.MaxInt;
  end;

  class function TInteger.MaxLongInt: Integer;
  begin
    Result := System.MaxLongint;
  end;

  class function TInteger.IntToBin(AInteger: Cardinal): string;
  var
    i: Integer;
  begin
    SetLength(Result, 32);
    for i := 1 to 32 do
    begin
      if ((AInteger shl (i-1)) shr 31) = 0 then
        Result[i] := '0'
      else
        Result[i] := '1';
    end;

  end;

  class function TInteger.IntToHex(AInteger: Integer): string;
  begin
    Result := SysUtils.IntToHex(AInteger, 0);
  end;

  class function TInteger.HexToInt(AString: string): Integer;
  begin
    if TString.Left(AString, 1) = '$' then
      Result := StrToInt(AString)
    else
      Result := StrToInt('$' + AString);   
  end;

  class function TInteger.MakeSerialNo(AInteger, ADigit: Integer): string;
  var
    tmpStr: string;
    i: Integer;
  begin
    tmpStr := '';
    for I := 0 to ADigit - 1 do    // Iterate
    begin
      tmpStr := tmpStr + '0';
    end;    // for

    Result := FormatFloat(tmpStr, AInteger);

  end;

  { TFloat }

  class function TFloat.FloatToMoney(const Value: Double; Round: Boolean): string;
  begin
    //金额默认采用四舍五入
   
  end;

  class function TFloat.IsValidFloat(AString: string): Boolean;
  begin
    Result := True;
    try
      StrToFloat(AString);
    except
      Result := False;
    end;
  end;

  class function TFloat.MaxDouble: Double;
  begin
    Result := 1.7e+308;
  end;

  class function TFloat.MaxExtended: Extended;
  begin
    Result := 1.1e+4932;
  end;

  class function TFloat.MinDouble: Double;
  begin
    Result := 5.0e-324;
  end;

  class function TFloat.MinExtended: Extended;
  begin
    Result := 3.4e-4932;
  end;

  class function TFloat.SameValue(const A, B: Single;
    Epsilon: Single): Boolean;
  begin
    Result := Math.SameValue(A, B, Epsilon);
  end;

  class function TFloat.SameValue(const A, B: Double;
    Epsilon: Double): Boolean;
  begin
    Result := Math.SameValue(A, B, Epsilon);
  end;

  class function TFloat.SameValue(const A, B: Extended;
    Epsilon: Extended): Boolean;
  begin
    Result := Math.SameValue(A, B, Epsilon);
  end;

  { TBoolean }

  class function TBoolean.BoolToStr(ABoolean: Boolean): string;
  begin
    if ABoolean then
      Result := 'True'
    else
      Result := 'False';         
  end;

  class function TBoolean.StrToBool(AString: string): Boolean;
  begin
    if UpperCase(AString) = 'TRUE' then
      Result := True
    else
      Result := False;
     
  end;

  end.
  

来源:https://www.tulaoshi.com/n/20160219/1617535.html

延伸阅读
  在公司原有系统的代码中,我看到了很多判别对象的ClassName属性进行分别处理的代码。而且似乎已经是处理类似问题的标准方法。但是其中可能会隐含一些问题。 首先,我们知道多态是面向对象的三大特性之一。所谓多态,其思想就是,对于不同的具体类型,我们可以通过相同的抽象接口进行访问,而不必关系具体类型的实现细节。就...
Delphi支持参数化SQL语句,不过俺很少用Paramters/Params属性,一般都是自己构造SQL, 用SQL.Text:='Select * from ..Where ID='''+edit1.text+''''; 不过这种方法要小心SQL注入攻击哦。 今天改用ADOQuery控件的Paramters属性,本已为简单的很,一用发现了不少问题。由于我只使用一个ADOQuery控件...
我在编写一个系统时遇到了一个问题,无法在C#中调用Delphi6写的DLL,只因为DLL的参数是string类型的。然后在网上找相关的资料,还是没有结果。经过我的再三琢磨,现在已经解决,特写此文章与大家分享我的喜愉! Dellphi DLL文件: /////////////////////////////////////////////////////////////////// library mydll; uses SysUtils, Clas...
Delphi7对XML的支持分析 zhjDelphi7对XML的支持---TXMLDocument类       Delphi7 支持对XML文档的操作,可以通过TXMLDocument类来实现对XML文档的读写。可以利用TXMLDocument把XML文档读到内存中,从而可以进行编辑、保存操作。TXMLDocument类是通过DOM(文档对象模型)接口来访问XML文档中的各个元素的。对于DOM...
标签: SQLServer
bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 int 从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。 smallint 从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。...

经验教程

359

收藏

98
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部