應該是型態的問題吧 |
尚未結案
|
kool0318
一般會員 發表:14 回覆:17 積分:6 註冊:2005-01-11 發送簡訊給我 |
var
a,b,c,d Double;
e:integer;
d:=(a-b)*c*1000; if Pos('.', FloatToStr( d )) > 0 then
e:=e StrToInt(Copy(FloatToStr(d), 1, Pos('.', FloatToStr(d)-1))
else
e:=e StrToInt(Copy(FloatToStr (d), 1, MAXINT)); 請教各位專家,當d值為浮點數時一切正常
但是當d值是整數時,到下方if判斷式時為什麼是執行
e:=e StrToInt(Copy(FloatToStr(d), 1, Pos('.', FloatToStr(d)-1))
而不是
e:=e StrToInt(Copy(FloatToStr (d), 1, MAXINT));
而且經過
StrToInt(Copy(FloatToStr(d), 1, Pos('.', FloatToStr(d)-1))
運算後d值會少1 請問如何解決 謝謝
|
rexchiu
中階會員 發表:14 回覆:88 積分:70 註冊:2002-03-17 發送簡訊給我 |
引言:程式是不是少個)?? 還有就是我測試了一下, 並沒有你說的哪種情形說! 以下是我測試的程式碼var a,b,c,d Double; e:integer; d:=(a-b)*c*1000; if Pos('.', FloatToStr( d )) > 0 then //e:=e StrToInt(Copy(FloatToStr(d), 1, Pos('.', FloatToStr(d)-1)) e:=e StrToInt(Copy(FloatToStr(d), 1, Pos('.', FloatToStr(d))-1)) else e:=e StrToInt(Copy(FloatToStr (d), 1, MAXINT));請教各位專家,當d值為浮點數時一切正常 但是當d值是整數時,到下方if判斷式時為什麼是執行 e:=e StrToInt(Copy(FloatToStr(d), 1, Pos('.', FloatToStr(d)-1)) 而不是 e:=e StrToInt(Copy(FloatToStr (d), 1, MAXINT)); 而且經過 StrToInt(Copy(FloatToStr(d), 1, Pos('.', FloatToStr(d)-1)) 運算後d值會少1 請問如何解決 謝謝 procedure TForm1.Button1Click(Sender: TObject); Var a,b,c,d:double; i:integer; begin a:=2.1; b:=1.1; c:=3.1; d:=(a-b)*c*1000; if pos('.',floattostr(d))>0 then i:=strtoint(Copy(FloatToStr(d), 1, Pos('.', FloatToStr(d))-1)) else i:=strtoint(Copy(FloatToStr(d), 1, MAXINT)); showmessage(inttostr(i)); end;Best Regards, Rex Chiu
------
Best Regards, Rex Chiu |
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
我測試也是正常 (少個))
不過我想紅色那行應該就可以達到你要的功能
var a,b,c,d: Double; e:integer; begin a:=5.469; b:=2.541; c:=1.2; d:=(a-b)*c*1000; e:=0; { if Pos('.', FloatToStr( d )) > 0 then e:=e StrToInt(Copy(FloatToStr(d), 1, Pos('.', FloatToStr(d))-1)) else e:=e StrToInt(Copy(FloatToStr (d), 1, MAXINT)); } e:=e Trunc(d); Showmessage(IntToStr(e));@瞭解越多.懂得越少@ |
kool0318
一般會員 發表:14 回覆:17 積分:6 註冊:2005-01-11 發送簡訊給我 |
|
kool0318
一般會員 發表:14 回覆:17 積分:6 註冊:2005-01-11 發送簡訊給我 |
|
rexchiu
中階會員 發表:14 回覆:88 積分:70 註冊:2002-03-17 發送簡訊給我 |
嗯...找到原因了
參考這篇解答
因為所有的float type 在Delphi中都是由Extended 這種型態組成
http://groups.google.com.tw/groups?hl=zh-TW&lr=&rls=GGLD,GGLD:2003-50,GGLD:zh-TW&frame=right&th=596130cb29ea4171&seekm=LK86WCANJQY3EwEV 所以你要得到775,將你的變數宣告成extended在運算的時候就會得到正確的值
procedure TForm1.Button1Click(Sender: TObject); Var a,b,c,d:extended; i,e:integer; s:string; begin a:=20.5; b:=20.1125; c:=2; d:=(a-b)*c*1000; if pos('.',floattostr(d))>0 then e:=strtoint(Copy(FloatToStr(d), 1, Pos('.', FloatToStr(d))-1)) else e:=strtoint(Copy(FloatToStr(d), 1, MAXINT)); showmessage(inttostr(e)); end;Best Regards, Rex Chiu
------
Best Regards, Rex Chiu |
kool0318
一般會員 發表:14 回覆:17 積分:6 註冊:2005-01-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |