使用錯誤的float格式,如何避免當機? |
答題得分者是:william
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
使用錯誤的float格式,如何避免當機?
void __fastcall TForm1::Button1Click(TObject *Sender) { long a=2139113410; float *p=(float*)&a; long b; try { b = *p; // 執行到這一行就當機(死當) } catch(...){} }1.我有一些資料在檔案裡要作float的運算, 無奈檔案有些毀損, 以致讀進來的資料轉成float時,成為不正確的float格式,就像類似上面的狀況,每次執行到那一行就死當. 2.我的系統是win98 bcb5 3.錯誤的float格式就轉成零就好,不要當機就好. 4.不知各位先進是否也曾遇到這樣的問題? |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
感謝william版主的回答, 理論上這是我要的答案, 但很歹勢, 還是會當機, 當在_isnan()這個function上. 1.理論上 try 應該就可攔截這個錯誤訊息.
2.我家用winxp+bcb5 可攔截這個錯誤訊息.
3.但公司用win98+bcb4&bcb5卻會當機,煩請各位先進, 假如是用win98+bcb4或win98+bcb5,可否幫我測一下,這個程式會不會當機,謝謝大家.
void __fastcall TForm1::Button1Click(TObject *Sender) { long a=2139113410; float *p=(float*)&a; long b; try { b = *p; // 執行到這一行就當機(死當) } catch(...){} } |
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
引言:brook你好: 我幫你試過了,結果出現錯誤訊息,建議把float改成double,測過沒問題,結果 b = 0 因為我是看過本站文章提到,float變數並不準確,容易造成錯誤 改用double會比較好。void __fastcall TForm1::Button1Click(TObject *Sender) { long a=2139113410; float *p=(float*)&a; long b; try { b = *p; // 執行到這一行就當機(死當) } catch(...){} } |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |