delphi關於小數位精度的問題


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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM