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;

路过的点个赞再走,谢谢~😊😊😊😀😀😀

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值