比如我有个数0.56和0.52我现在想通过formatfloat函数转换后不进行转换,结果:0.5和0.5,大家指教下怎么转换哦。

解决方案 »

  1.   

    可以使用下面函数: function RoundClassic(R: Real): Int64;
    begin
    Result:= Trunc(R);
    if Frac(R) >= 0.5 then
        Result:= Result + 1;
    end; 
      

  2.   

    测试了以下代码, 没发现楼主所说的情况:  ShowMessage(FormatFloat('0.0', 0.56));   //显示的结果是0.6
      ShowMessage(FormatFloat('0.0', 0.52));   //显示的结果是0.5
      

  3.   

    自己写个函数吧:
    function MyFormatFloat(const Format: string; Value: Extended): string;
    begin
      Result := Copy(FormatFloat(Format + '0', Value), 1, Length(Format));
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      ShowMessage(MyFormatFloat('0.0', 0.56));
      ShowMessage(MyFormatFloat('0.0', 0.52));
    end;
      

  4.   

    //改进版
    function MyFormatFloat(rData: Double; idoc:integer): Double;
    var
      i:integer;
    begin
      i:=pos(',',FloatToStr(rData));
      Result := StrToFloat(Copy(FloatToStr(rData),1,i+idoc));
    end;//调用MyFormatFloat(5.652,1);//1位小数
    MyFormatFloat(5.652,2);//2位小数
      

  5.   

    不好意思,上边的:i:=pos(',',FloatToStr(rData));
    应该改为:i:=pos('.',FloatToStr(rData));
    打字太快,没注意看
      

  6.   

    Round() 四舍5入
    Trunc()截掉小数,
    配合乘除什么结果都能得到啊
      

  7.   

    如果确定是小数点后1位copy('0.56',pos('.','0.56')+1,1);//2位就把1换成2