发新话题
打印

四舍五入的BUG

四舍五入的BUG

四舍五入的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
;

TOP

发新话题