有个十六进制小数,如何转化为十进制小数,如1.2d3e423c.一后面的为小数点。

解决方案 »

  1.   

    不会吧,搂主,这个好像是标准算法吧。
    x*16^n的和
    其中x是每一位的值,n是阶次,从0开始计算上面的等于
    (1*16^0)+(2*16^-1)+(13*16^-2)+(3*16^-3)+(14*16^-4)+(4*16^-5)........
    可以用循环计算结果
      

  2.   

    cmain83(龙行天下2008),那多谢了
      

  3.   

    一个strtoint就可以搞定的吧。
      

  4.   

    var
      i:Integer;
      f:Double;s:=Trim('1.2d3e423c');
    i:=Pos('.',s);
    s1:=Copy(1,i-1);
    f:=StrToInt('$'+s1);//计算整数部分
    s1:=Copy(i+1,Length(s));
    i:=Length(s1); //得到小数部分的16进制位数
    f:=f + StrToInt('$'+s1)/Power(16,i);//再加上小数部分
      

  5.   

    如果是用字符串表示的话. 以下函数即可.function HexStrToFolat(const Value: String): Double;
    var
      i: Integer;
      St, Str: String;
      F: Double;
    begin
      Result := 0.0;  Str := Trim(Value);
      i := Pos('.', Str);
      St := Copy(Str, 0, i - 1);
      Result := StrToInt('$' + St);  St := Copy(Str, i + 1, Length(Str) - i);
      F := StrToInt('$' + St);
      F := F/Power(16, Length(St));
      Result := Result + F;
    end;方法与楼上的是一样的