delphi關於小數位精度的問題

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;分享

相關文章
相關標籤/搜索