round函數用的是銀行家算法,不好使。
roundTo也不好使。
什么Format呀,
result := int(value * 100 + 0.5) / 100;
全都統統不好用。
后面弄明白原因了,許多時候計算的結果為:17.145,但事實上是17.1449999999等,這時你再四舍五入兩位結果就不對,尤其是錢。呵呵
在網上終於獵殺到一個高手的算法,大家分享下:
class function TNewDcFunc.RoundFloat(f:double;i:integer):double;
var
s:string;
ef:extended;
begin
s:='#.'+ StringOfChar('0',i);
ef:=StrToFloat(FloatToStr(f));//防止浮點運算的誤差
result:=StrToFloat(FormatFloat(s,ef));
end;
