線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1971
推到 Plurk!
推到 Facebook!

TQuery.fieldbyname().asfloat 跟TQuery.fieldbyname().asinteger的問題

答題得分者是:hagar
firesu
中階會員


發表:26
回覆:28
積分:55
註冊:2004-12-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-04 14:00:27 IP:61.62.xxx.xxx 未訂閱
aa 跟bb 欄位是double,
Qy1 先下sql 'select sum(aa),aum(bb) from XXXXX'
open 之後sum(aa) 跟 sum(bb) 的值都是1734056.8
在程式寫判斷時
Qy1.Fields[0].AsFloat-Qy1.Fields[1].AsFloat= 2.3283064365e-10 <----
Qy1.Fields[0].AsInteger-Qy1.Fields[1].AsInteger= 0

用asfloat來相減怎麼不是0..?

sql直接下select sum(aa)-sum(bb) from xxxx 出的值也不是0..是2.3283064365e-10
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-04 18:58:05 IP:59.124.xxx.xxx 未訂閱
用 AsFloat 本來就不會準

參考:
http://groups.google.com.tw/group/borland.public.delphi.vcl.components.using/browse_thread/thread/e6d5bd49fde25666/834937675a5839cb?lnk=st&q=AsFloat + delphi&rnum=13&hl=zh-TW#834937675a5839cb

其中有這麼一段:
This is an age old programming mistake (I have made it myself...).
It is NOT a Delphi specific problem. Floating point values, by definition,
are estimates. Internally, they result from a computation, not a stored actual
value. If you want to minimize rounding errors, use currency.
系統時間:2024-05-07 13:17:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!