帮忙搞定Round 的奇怪现象(20分)

  • 主题发起人 主题发起人 里斯
  • 开始时间 开始时间

里斯

Unregistered / Unconfirmed
GUEST, unregistred user!
Round 的奇怪现象
round(10.5) =10
round(11.5) =12
round(10.51) =11
为什么round(10.5) =10而不等于11?
请赐教






 
Round函数提供的功能就是四舍六入五留双,与我们平时使用的四舍五入有点不一样。
可以自己写一个四舍五入的函数,满足你的要求
Function SRound(X:Extended;Decimal:Integer):Extended;
Var
TruncInt:Integer;
Begin
X:=X*IntPower(10,Decimal);
TruncInt:=Trunc(X);
if TruncInt<>0 then
X:=X-TruncInt+1;
X:=Round(X);
if TruncInt<>0 then
X:=X+TruncInt-1;
X:=X*IntPower(10,Decimal*-1);
Result:=X;
End;
 
whsunbin is right
 
function MyRound(ed: Extended): Integer;
begin
Result := Round(ed);
if (ed - Result >= 0.5) then Inc(Result);
end;
 
round函数就是这样,还是+0.5取整简单
 
呵呵,比较古老的问题,我认为倒不是简单的四舍六入五留双的问题,主要原因在于
浮点数存储误差,其实还是自己写这种四舍五入精确些+0.5取整
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部