Delphi四舍五入  
官方Delphi 学习QQ群: 682628230(三千人)
频道

Delphi四舍五入


Delphi四舍五入


Delphi中有一个四舍五入取整函数Round。但它是按银行家舍入法的规则实施舍入操作的,Delphi中没有按算术舍入法规则实施舍入操作的四舍五入取整函数。



在Delphi中使用四舍五入函数一直是使用Round,可是有时候发现,使用它得到的答案与我们预期的会不太一样。

举例:i := Round(13.5) 结果: i=14

           i := Round(12.5) 结果: i=12


最后得出结论:Delphi的四舍五入看要四舍五入的前一位,奇入偶不入,例如13.5,3是奇数,此时小数点后的5就入,结果是14。12.5因为2是偶数,所以不入,结果是12。


但是我们平时遇到的四舍五入并不需要此操作,所以自定义四舍五入函数,如下:

//自定义的四舍五入函数
//range为小数点后几位
function MyRound(value: Double; range: Integer): Double;
var
  DotPos, i, sign: Integer;
  Str, s: string;
  jw: Boolean; //进位标志
begin
  Result := value;
  if range = 99 then //不进行四舍五入
    Exit;
 
  //先判断正负 四舍五入绝对值 再*sign
  if value >= 0 then
    sign := 1
  else
    sign := -1;
  value := abs(value);
 
  Str := FloatToStr(value);
  DotPos := Pos('.', Str);
  jw := False;
  if DotPos <> 0 then
  begin
    if range > 0 then
      value := StrToFloat(Copy(Str, 1, DotPos + range))
    else
      value := StrToFloat(Copy(Str, 1, DotPos - 1));
    s := Copy(Str, DotPos + range + 1, 1);
    if s <> '' then
    begin
      i := StrToInt(s);
      if i >= 5 then
        jw := True;
    end;
  end;
  if jw then
    case range of
      0: value := value + 1;
      1: value := value + 0.1;
      2: value := value + 0.01;
    end;
 
  Result := value * sign; //Result := value;
end;


来源:https://blog.csdn.net/qq_33397419/article/details/126298933


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.033000946044922 seconds