小數點的問題,有誤差 !! |
答題得分者是:dllee
|
UB
一般會員 發表:18 回覆:19 積分:7 註冊:2007-02-19 發送簡訊給我 |
各位大大 ~
我利用 Adoquery 抓資料庫裡面的數值,出現的結果總是有小小的誤差,例如 49.70 他就變成了 49.7000007629395, 諸如此類的 ~ 看起來問題並不大,但是我連續加總數量大的話就會有誤差質就會影響結果了,我參考了這篇 http://delphi.ktop.com.tw/board.php?cid=30&fid=71&tid=90847 使用EditMask 結果還是一樣,而其他使用printf 或者 format 都是變成 string 並不利於加總,所以我並沒有錯測試,請問有什麼辦法可以解決的嘛 !? 再補充一下,剛剛測試了 這篇 http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=68018 所提到的方法,使用 format ,結果還是一樣的 !! 編輯記錄
UB 重新編輯於 2007-11-15 04:19:07, 註解 無‧
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
原始數值是使用 Single 存的嗎?看起來像是用 Single 存的資料因精確度不足所造成的。
數值改用 Double 或 Extended 去存,就不會有問題了。 ■ VMASK - ViewMove Automation Software Kernel ■ VMIO-Server/SECS/GEM ■ dllee's blog ■ dllee's StatPlus ■
------
http://www.ViewMove.com |
UB
一般會員 發表:18 回覆:19 積分:7 註冊:2007-02-19 發送簡訊給我 |
|
chenyk
高階會員 發表:14 回覆:95 積分:171 註冊:2002-07-08 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
我使用 BCB 作簡單的測試:
[code cpp] void __fastcall TForm1::Button1Click(TObject *Sender) { double dd=49.70; // 8 Bytes 浮點數 float ff=49.70; // 4 Bytes 浮點數 Edit1->Text=AnsiString(dd); Edit2->Text=AnsiString(ff); } [/code] 結果 Edit1 顯示 49.7 Edit2 顯示 49.7000007629395 用 Delphi (我亂寫的, 我沒 Delphi ) [code delphi] Double dd:=49.70; // 8 Bytes 浮點數 Single ss:=49.70; // 4 Bytes 浮點數 Edit1.Text:=dd; Edit2.Text=ss; [/code] 應該可以看到相同的結果。 因為看到您提的數值 49.70 會變成 49.7000007629395 就是儲存的精度不夠所導致。 我沒用過 MySQL,資料庫也是不熟,不過,您的問題還是在資料或變數儲存時,在某一個環節使用了 4 Bytes 的浮點數所導致。您可以在每一個變數或資料儲存的環節上,把數值作記錄,看看是那個環節出了問題。 ■ VMASK - ViewMove Automation Software Kernel ■ VMIO-Server/SECS/GEM ■ dllee's blog ■ dllee's StatPlus ■
------
http://www.ViewMove.com |
UB
一般會員 發表:18 回覆:19 積分:7 註冊:2007-02-19 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
將原資料庫備份,把它匯出,改完格式再匯到新的資料庫。
MySQL 應該也可以線上改欄位格式。 只要資料備份好,亂試試不成,再還原回去即可。 在 PC 下,把 \mysql\data 整個備份即可。(之前在玩 phpBB 時,我是這樣備份的 ^_^) ■ VMASK - ViewMove Automation Software Kernel ■ VMIO-Server/SECS/GEM ■ dllee's blog ■ dllee's StatPlus ■
------
http://www.ViewMove.com |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |