当S:=23.5678时,I:=TRUNC(STRTOFLOAT(S))的结果不等于235678,却等于235677是怎么回事?代码如下:procedure TForm1.Button1Click(Sender: TObject);
VAR
   I:INTEGER;
   S:STRING;
begin
   I:=0;
   S:='23.5678';
   I:=TRUNC(STRTOFLOAT(S)*10000);
end;另如果让S:='23.56781'时  I:=TRUNC(STRTOFLOAT(S)*10000);得到的结果是235678

解决方案 »

  1.   

    float的精度与trunc取整数结合后的结果。正常。
      

  2.   

    x := StrToFloat(S);
    得到的是一个极其近似 23.5678 的值,而Trunc直接去掉了小数部分,就算你直接赋值
    x := 23.5678;
    结果可能也是一样的。还是用Round比较好。
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    S:string;
    I:integer;
    K:double;
    begin
     S:='23.5678';
     k:= STRTOFLOAT(S)*10000;
     I:=TRUNC(K);
    end;
    分开写吧,这样就行了。
      

  4.   

    有两种解决方法。第一种是把Trunc改成使用Round
     Trunc 直接截掉小数部份
     Round 按照银行家算法“四舍五入”procedure TForm1.Button1Click(Sender: TObject);
    var
      I:Integer;
      S:string;
    begin
      I:=0;
      S:='23.5678';
      I:=Round(StrToFloat(S)*10000);
    end;
    第二种方法:分成多骤完成。procedure TForm1.Button1Click(Sender: TObject);
    var
      I:Integer;
      S:string;
      vSingle:Single;
    begin
      I:=0;
      S:='23.5678';
      if TryStrToFloat(s,vSingle) then
      begin
        vSingle := vSingle * 10000;
        I:=Trunc(vSingle);
      end;
    end;