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