这里有一段代码:
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
  i:=strtoint(copy(floattostr(frac(strtofloat(edit1.Text))),3,1));
  showmessage(inttostr(i));
end;作用是将edit中输入的实数的小数部分取出然后将其转换成整数
现在有一个问题:如果在edit1中输入1000000000.8得到的结果是7而不是8,这是为什么?

解决方案 »

  1.   

    这是由于浮点数的存储规则导致的,因为frac(strtofloat(edit1.Text))取出的值是0.79999999999
      

  2.   

    既然你確定EDIT1輸入的是帶小數的可以直接用.分割啊copy(edit1.text,pos('.',edit1.text)+1,length(edit1.text)-pos('.',edit1.text)+1);或者用 ExtractStrings 直接分割
      

  3.   


    你这个方法很好,学习了。
    只是edit中输入的数不能确定是整数还是小数
      

  4.   

    判断是整数还是实数的算法
    如果当前数取正 - 本身 = 0 就是整数。
    function IsZhengshu(const Value: Extended): boolean;
    begin
      result := Trunc(Value) - Value = 0;
    end;
      

  5.   


    建议改成这样:function IsZhengshu(const Value: Extended): boolean; 
    begin 
      Result := Abs(Trunc(Value) - Value) < 1E-12; 
    end;
      

  6.   

    if pos('.',edit1.text)>0 then begin
    分割
    end else
      showmessage('整數');