delphi四舍五⼊Round函数【百帖整理】
在最近版本的Delphi Pascal 编译器中,Round 函数是以 CPU 的 FPU (浮点部件) 处理器为基础的。这种处理器采⽤了所谓的 "银⾏家舍⼊法",即对中间值 (如 5.5、6.5) 实施Round函数时,处理器根据⼩数点前数字的奇、偶性来确定舍⼊与否,如 5.5 Round 结果为 6,⽽ 6.5 Round 结果也为6, 因为 6 是偶数。
对于XXX.5的情况,整数部分是奇数,那么会Round Up,偶数会Round Down,例如:
四舍五入函数保留整数
x:= Round(17.5) = x = 18
x:= Round(12.5) = x = 12
⼀、四舍五⼊法
四舍五⼊是⼀种应⽤⾮常⼴泛的近似计算⽅法,其有算术舍⼊法和银⾏家舍⼊法两种。
所谓算术舍⼊法,就是我们通常意义上的四舍五⼊法。其规则是:当舍去位的数值⼤于等于5时,在舍去该位的同时向前位进⼀;当舍去位的数值⼩于5时,则直接舍去该位。
所谓银⾏家舍⼊法,其实质是⼀种四舍六⼊五留双(⼜称四舍六⼊五奇偶)法。其规则是:当舍去位的数值⼩于5时,直接舍去该位;当舍去位的数值⼤于等于6 时,在舍去该位的同时向前位进⼀;当舍去位的数值等于5时,如果前位数值为奇,则在舍去该位的同时向前位进⼀,如果前位数值为偶,则直接舍去该位。
综上所述,两种舍⼊法所得结果不尽⼀致,因此在使⽤时必须根据实际需要加以区别。否则会出现⼀些莫明其妙的偏差。
⼆、Delphi中的四舍五⼊函数
众所周知,Delphi中有⼀个四舍五⼊取整函数Round。但它是按银⾏家舍⼊法的规则实施舍⼊操作的,Delphi中没有按算术舍⼊法规则实施舍⼊操作的四舍五⼊取整函数。为此,本⼈编写了⼀个基于算术舍⼊法的四舍五⼊取整函数RoundEx作为对Delphi的补充。具体实现如下:
function RoundClassic(R: Real): Int64;
begin
Result:= Trunc(R);
if Frac(R) >= 0.5then
Result:= Result + 1;
end;
-------------------------
世界上的许多国家已⼴泛采⽤“四舍六⼊法”。我国国家科委于1955年就作了推荐。“四舍六⼊法”可以概括为:“四舍六⼊五考虑,五后⾮零就进⼀,五后皆零看奇偶,五前为偶应舍去,五前为奇要进⼀。”
好像短⼀点的⼝诀叫“四舍、六⼊、五凑偶”
据说欧洲银⾏全采⽤这个模式
这个都不知道,四舍六⼊五成双,Round都是这样处理的