比如四舍五入。
1.2->1
1.6->2谢谢!!

解决方案 »

  1.   

    function intdata(d:double):double;
    begin
      result:=int(d*100+0.5)/100;
    end;
      

  2.   

    用两次转换
    floattostr
    strtoint
      

  3.   

    例如:
    var 
      Res :real;
      Obj :integer;
    begin
     Obj := strtoint(floattostr(Res));
    end;
      
      

  4.   

    Round(1.2) => 1
      Round(1.6) => 2
      

  5.   

    四舍五入的BUG    
        
    Delphi的四舍五入函数Round有BUG,无法正常工作。对于XXX.5的情况,整数部分是奇数,那么会Round Up,偶数会Round Down,例如:x:= Round(17.5) = x = 18x:= Round(12.5) = x = 12请使用下面的函数代替Round:function DoRound(Value: Extended): Int64;procedure Set8087CW(NewCW: Word);asmMOV Default8087CW,AXFNCLEXFLDCW Default8087CWend;constRoundUpCW = $1B32;varOldCW : Word;beginOldCW := Default8087CW;trySet8087CW(RoundUpCW);Result := Round(Value);finallySet8087CW(OldCW);end;end;
     
       
      

  6.   

    谢谢各位的指教。我经过测试和分析得到结论:
    1。用floattostr和strtoint两次转换的方法不行,strtoint不能转非整形字符(如1.2)。
    2。Round的确是整数部分是奇数,那么会Round Up,偶数会Round Down,但仔细分析一下,也许这是Delphi经过精心考虑才这样做的,因为X.5是在X和X+1中间,究竟舍还是入?所以用概率的方法,遇到奇数近偶数舍。如果程序里有很多四舍五入的地方,这样应更合理。但如果要严格按照定义的四舍五入,可以用chijingde写的函数。由于我不需要很严格,所以我最后选择直接使用Round。谢谢大家!等会发分。
      

  7.   

    round  本来就不是BUG ,就是这么设计的 与咱们平时习惯的四舍五入不同的如果你真要实现四舍五入 可以试试  trunc(i+0.5)
      

  8.   

    formatfloat('0',1.5)  这样好象可以的哦!不过转换后是STRING