round函數用的是銀行家算法,很差使。算法
roundTo也很差使。函數
什麼Format呀,orm
result := int(value * 100 + 0.5) / 100;string
全都通通很差用。io
後面弄明白緣由了,許多時候計算的結果爲:17.145,但事實上是17.1449999999等,這時你再四捨五入兩位結果就不對,尤爲是錢。呵呵function
在網上終於獵殺到一個高手的算法,你們分享下:class
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;分享