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

編譯出錯: Operator not applicable to this operand type

答題得分者是:HM
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-01 09:44:11 IP:219.132.xxx.xxx 未訂閱
大家好!    
var
  a : Real ;
begin  
  a := Chart1.Series[0].YValue[2] mod 2 ;
  showmessage(FlaotToStr(a)) ;
end;
如上段代碼編譯出現錯誤信息:Operator not applicable to this operand type 如果將a := Chart1.Series[0].YValue[2] mod 2 ;語句中的'mod' 改為 '/' 可以編譯,但是mod,div等就是編譯提示錯誤信息,請問是怎麼回事,如何解決?謝謝!< > 注:有在網站上查到錯誤信息: >< >
sos_admin
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-01 11:33:20 IP:218.94.xxx.xxx 未訂閱
var a:Integer; b:Real; begin a:=123; b:=(a mod 5); ShowMessage(Format('%f',[b])); end; /////////////////////////////// var   a : Real;   begin     a := Chart1.Series[0].YValue[2] mod 2 ; showmessage(FlaotToStr(a)) ; end; 红色的地方是整形值吗? 风花雪月 e梦情缘 网络代号:wnhoo or sos_admin 网名:e梦缘 Mail:wnhoo@163.com
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-01 12:03:15 IP:59.36.xxx.xxx 未訂閱
s_admin您好!    Chart1.Series[0].YValue[2] 為Double型.    有試過這樣寫也不行:
var
  a : Real ;
begin  
  a := Chart1.Series[0].YValue[2]  ;
  showmessage(FloatToStr(a)) ; // 顯示結果為:82
  a := a mod 2 ; // 這一句編譯出錯.改成 a := a / 2 ;編譯就沒問題.但是我需要是取餘數.
>     
        
sos_admin
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-01 13:44:54 IP:218.94.xxx.xxx 未訂閱
Mod是取模 如下: var a, c: Integer; b: Real; begin b := 123.8; a := Trunc(b); MessageBox(Handle, PChar(IntToStr(a)), '仅仅取整数', MB_OK MB_ICONINFORMATION); a := Round(b); // MessageBox(Handle, PChar(IntToStr(a)), '四所五入取整数', MB_OK MB_ICONINFORMATION); c := Round(b) mod 5; MessageBox(Handle, PChar(IntToStr(c)), '四所五入取整数,然后再取模', MB_OK MB_ICONINFORMATION); end; 风花雪月 e梦情缘 网络代号:wnhoo or sos_admin 网名:e梦缘 Mail:wnhoo@163.com
sos_admin
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-01 13:51:09 IP:218.94.xxx.xxx 未訂閱
这个函数也可以对Real取MOD function ModReal(const Value: Real; const M: Integer): Real; begin Result := (Trunc(Value) mod M) (Value - Trunc(Value)) end; var a, c: Integer; b, d: Real; begin b := 123.8; a := Trunc(b); MessageBox(Handle, PChar(IntToStr(a)), '仅仅取整数', MB_OK MB_ICONINFORMATION); a := Round(b); // MessageBox(Handle, PChar(IntToStr(a)), '四所五入取整数', MB_OK MB_ICONINFORMATION); c := Round(b) mod 5; MessageBox(Handle, PChar(IntToStr(c)), '四所五入取整数,然后再取模', MB_OK MB_ICONINFORMATION); d := ModReal(b, 5); MessageBox(Handle, PChar(Format('%f',[d])), 'Real数据取模', MB_OK MB_ICONINFORMATION); end; 风花雪月 e梦情缘 网络代号:wnhoo or sos_admin 网名:e梦缘 Mail:wnhoo@163.com
HM
初階會員


發表:21
回覆:32
積分:25
註冊:2004-11-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-02 12:07:12 IP:220.130.xxx.xxx 未訂閱
@@ 我想…a 宣告為integer就好了吧… 我之前a 宣告為double也是同樣的錯誤… 後來才想到…mod是取餘數…餘數…是integer吧… 所以我改成integer就沒有錯了…
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-05 11:48:38 IP:219.130.xxx.xxx 未訂閱
謝謝HM的提醒!也非常感謝sos_admin版主大人的耐心詳解.謝謝!    問題已解決~    改為如下:
var
  a : Integer ;
begin
 a := trunc(Chart1.Series[0].YValue[0]) mod 2;  //需先取整再mod
 showmessage(intToStr(a)) ;
end;
系統時間:2024-04-26 20:34:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!