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

怎樣處理浮點數

答題得分者是:sos_admin
lafite
一般會員


發表:4
回覆:7
積分:2
註冊:2003-08-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-29 17:20:39 IP:210.184.xxx.xxx 未訂閱
sql 2000 table 中有1個 field 是 decmail type 18 perscsion 6 怎樣可以在從ADOTable 中存取小數點後6個位 我已嘗試用 FloatToStrF(XX.AsFloat,ffFixed,18,6) 但得出的結果也是 round up to 4 個小數 e.g. sql data: 1234.123456 result : 1234.123500 Thank you
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-29 17:31:58 IP:61.155.xxx.xxx 未訂閱
procedure TForm1.Button2Click(Sender: TObject); var s:string; begin s:=FloatToStrF(1234.123456,ffFixed,18,6); showmessage(s); end; 可以得出6个小数呀! 可能是您储存进去的不对哦
lafite
一般會員


發表:4
回覆:7
積分:2
註冊:2003-08-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-29 17:47:13 IP:210.184.xxx.xxx 未訂閱
你的例子是可行的 但經由ADO Connection 存入小數數值是有問題的 因delphi BCOD 的default 是4 位小數 怎樣可以指定TField value type 是 float
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-29 18:08:09 IP:61.155.xxx.xxx 未訂閱
var a:double; begin a:=123.123456;    adoquery1.SQL.Clear ; //adoquery1.SQL.Text :='insert into ab (nn) values (' floattostr(a) ') '; adoquery1.SQL.Text :='insert into ab (nn) values (:nn) '; adoquery1.Parameters.ParamByName('nn').DataType :=ftstring; adoquery1.Parameters.ParamByName('nn').Value :=a; adoquery1.ExecSQL ; end; 上面的方法您任选一种都可以实现,DataType 不可以为ftfloat哦
lafite
一般會員


發表:4
回覆:7
積分:2
註冊:2003-08-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-29 23:11:20 IP:218.102.xxx.xxx 未訂閱
對不起, 可能我解釋得不夠詳細 我用SQL 2000 儲存資料 我是用 ADO Connection 連接 SQL 2000 資料庫 Table 設定如下 TableValue Decmail 18 6 當我 ADOTable 來連接 SQL Table 時 發現當我要取出一筆有6個小數位值的資料時 我用的方法時張這筆資料放在Edit Field, 在TableValue 的值是 12564.123456 但當我以下的語法取出時 EditField.Text := FloattoStrF(TableValue.AsFloat,ffFixed,18,6) 發現放在EditField.Text 的數值是 12564.123500 這樣有什麼方法可以張EditField.Text 的數值變成 12564.123456 thx a lot
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-30 09:55:03 IP:61.155.xxx.xxx 未訂閱
lafite 兄: 我测试并没有发现您所说的情况哦,我认为一定是您数据库中所存储的记录有问题哦〔您请察看一下〕。 .... begin adotable1.Append ; adotable1.FieldByName('nn').AsFloat:=456789.123456; adotable1.Post ; end; .... .... var s:string; begin s:=FloatToStrF(adotable1.FieldValues ['nn'],ffFixed,18,6); showmessage(s); end;
lafite
一般會員


發表:4
回覆:7
積分:2
註冊:2003-08-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-30 13:07:19 IP:210.184.xxx.xxx 未訂閱
會不會是 delphi version 問題 因為我是用delphi 5 professional version 我亦都嘗試不連接去SQL 2000 直接用delphi 測試都不能正確顯示 var r : double begin r := 123456789012.123456 editfield2.text := floattostrf(r, fffiexed,18,6) end. editfield2.text 結果顯示 123456789012.123472
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-30 13:46:33 IP:61.155.xxx.xxx 未訂閱
你上面的举例超出范围〔值、有效位数〕 Double 5.0 x 10^-324 .. 1.7 x 10^308 范围 15-16 有效位数 8 占用字节 var r : double; begin r := 12345678901.123456 ; showmessage(floattostrf(r,ffFixed,25,6)); end;
lafite
一般會員


發表:4
回覆:7
積分:2
註冊:2003-08-29

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-03 10:13:24 IP:210.184.xxx.xxx 未訂閱
問題已經解決了 原來是ADOTable 的property-"EnableBCD" 要設成 false 就ok 但也多謝 sos_admin 的解答
系統時間:2024-11-25 4:44:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!