四舍五入的BUG
(转
http://www.nssoft.net/showdoc.asp?did=267)
关键词:四舍五入
delphi的四舍五入函数round有bug,无法正常工作。
对于xxx.5的情况,整数部分是奇数,那么会round Up,偶数会Round Down,例如:
x:= Round(17.5) = x = 18
x:= Round(12.5) = x = 12
请使用下面的函数代替round:
function DoRound(Value: Extended): Int64;
procedure Set8087CW(NewCW: Word);
asm
mov Default8087CW,AX
fnclex
fldcw Default8087CW
end;
const
roundupcw = $1B32;
var
oldcw : Word;
begin
oldcw := Default8087CW;
try
set8087cw(RoundUpCW);
result := Round(Value);
finally
set8087cw(OldCW);
end;
end;