怎样让计算结果只保留两位小数点

解决方案 »

  1.   

    V是实数类型,St是字符串:
    Str(V : 0 : 2, St);
    将V保留两个小数存储在St中.V是实数类型:
    V=Int(V*100+0.5)/100;
    将V四舍五入保留两个小数,不知道你是要哪个?
      

  2.   

    var
      s:string;
      f:double;  f:=1234.564231;
      s:=format('%8.2f',[f]);
      s:=formatfloat('0.00',f)
      

  3.   

    var
      f:double;
    //前面计算f
    f:=strToFloat(format('0.2f',[f]));
      

  4.   

    f:=round(f,-2);不但保留2位,而且4舍5入
      

  5.   

    edit1.Text:=Format('%.2f', [123.456]);
      

  6.   

    function DRound(Value:double;cnt:integer):double;
    var
       fTmp:double;
       nTmp:double;
       k:int64;
    begin
       Result:=Value;
       nTmp:=Power(10.0,cnt);
       fTmp:=0.5;
       fTmp:=fTmp/nTmp;
       Result:=fTmp+Result;
       Result:=Result*nTmp;
       k:=0;
       asm
          fld qword ptr Result
          //__ftol begin
          push ebp
          mov ebp,esp
          LEA ESP,[ebp-$0c]
          wait
          fstcw word ptr [ebp-$04]
          wait
          mov al,[ebp-$03]
          or [ebp-$04],$00000c01
          fldcw word ptr [ebp-$04]
          fistp qword ptr [ebp-$0c]
          mov [ebp-$03],al
          fldcw word ptr [ebp-$04]
          mov eax ,[ebp-$0c]
          mov edx,[ebp-$08]
          mov esp,ebp
          pop ebp
          //__ftol end
          push esp
          lea esp,k
          mov [esp],eax
          add esp,4
          mov [esp],edx
          mov esp,ebp
          pop esp
          fild qword ptr k
          fstp qword ptr Result
          fld qword ptr nTmp
          fdivr qword ptr Result
          fstp qword ptr Result
       end;
    end;
      

  7.   

    uses math
    ==========
    非银行式四舍五入
    例:
       ShowMessage(FloatToStr(DRound(1.5352,3))); // 1.535
       ShowMessage(FloatToStr(DRound(1.5352,2))); // 1.54
       ShowMessage(FloatToStr(DRound(1.5352,1))); // 1.5
       ShowMessage(FloatToStr(DRound(1.5352,0))); // 2========================
    银行四舍五入法则:逢单四舍五入
    例:
      round(1.565,2)=1.56
      round(1.565,2)=1.58
      

  8.   

    更正一下代码,否则会引起溢出等意想不到的问题。
    =============================================
    uses
       math;
    function DRound(Value:double;cnt:byte):double;
    var
       fTmp:double;
       nTmp:double;
       k:int64;
    begin
       Result:=Value;
       if cnt>18 then exit;
       nTmp:=Power(10.0,cnt);
       fTmp:=0.5;
       fTmp:=fTmp/nTmp;
       Result:=fTmp+Result;
       Result:=Result*nTmp;
       k:=0;
       asm
          fld qword ptr Result
          //__ftol begin
          push ebp
          mov ebp,esp
          LEA ESP,[ebp-$0c]
          wait
          fstcw word ptr [ebp-$04]
          wait
          mov al,[ebp-$03]
          or [ebp-$04],$00000c01
          fldcw word ptr [ebp-$04]
          fistp qword ptr [ebp-$0c]
          mov [ebp-$03],al
          fldcw word ptr [ebp-$04]
          mov eax ,[ebp-$0c]
          mov edx,[ebp-$08]
          mov esp,ebp
          pop ebp
          //__ftol end
          push esp
          lea esp,k
          mov [esp],eax
          add esp,4
          mov [esp],edx
          mov esp,ebp
          pop esp
          fild qword ptr k
          fstp qword ptr Result
          fld qword ptr nTmp
          fdivr qword ptr Result
          fstp qword ptr Result
       end;
    end;
      

  9.   

    不过,也可以对系统Math里面的SimpleRoundTo做一下修改,效果是一样的,但是代码相对就简短许多//Code_Begin---------------------------
    function SimpleRoundTo(const AValue: Double; const ADigit: TRoundToRange = -2): Double;
    var
      LFactor: Double;
    begin
      LFactor := IntPower(10, ADigit);
      Result := Trunc((AValue / LFactor) + 0.5) * LFactor;
    end;
    //Code_End-----------------------------
    //Code_Begin---------------------------
    ////////////////////////////
    // SIMPLEROUND //
    ////////////////////////////
    uses
    math;
    function SimpleRound(const AValue: Double; const ADigit: TRoundToRange = -2): Double;
    var
      LFactor: Double;
    begin
      
      LFactor := IntPower(10, ADigit);
      Result := trunc(((AValue+0.51*LFactor) / LFactor) ) * LFactor;
    end;
    //Code_End-----------------------------