在Delphi中有没有把10进制转成2进制的函数?

解决方案 »

  1.   

    function IntToBin(aInt: Int64): String;
    var
      vFlag: Boolean;
      vBit: Shortint;
    begin
      vFlag := aInt < 0;  repeat
        vBit := aInt mod 2;
        aInt := aInt div 2;
        Result := IntToStr(Abs(vBit)) + Result;
      until aInt = 0;  if vFlag then
        Result := '-' + Result;
    end;// 10进制纯小数 转 2进制小数
    function DecimalToBin(aDec: Double): String;
    var
      vDoubleIt: Double;
    begin
      aDec := Frac(Abs(aDec));
      if aDec <> 0 then
      begin
        vDoubleIt := aDec * 2;
        Result := IntToStr(Trunc(vDoubleIt)) + DecimalToBin(vDoubleIt);
      end;
    end;// 10进制有理数 转 2进制有理数
    function FloatToBin(aFloat: Double): String;
    var
      vInteger: Int64;
      vDecimal: Double;
    begin
      vInteger := Trunc(aFloat);
      vDecimal := Frac(aFloat);
      Result := IntToBin(vInteger) + '.' + DecimalToBin(vDecimal);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      try
        Edit2.Text := FloatToBin(StrToFloat(Edit1.Text));
      except
        MessageBox(Handle, '请输入合法有理数', '错误', MB_OK);
      end;
    end;
      

  2.   

    任意进制地转换
    如conver(16,2)将16转换成2进制字符串
    function conver(const m,n:integer):string;
    const
    Table: array [0..19] of char = '0123456789ABCDEFGHIJ';
    var
    a,b:integer;
    begin
      Result:='';
      a:=m;
      b:=n;
      repeat
      result:=table[a mod b]+result;
      a:=a div b;
      until a=0;
    end;