簡體   English   中英

'double' 和 'int' 類型的無效操作數到二進制 'operator%'

[英]invalid operands of types 'double' and 'int' to binary 'operator%'

那里 !

在我的一個項目中,我正在嘗試使用 Arduino Mega2560 和給定代碼在七段顯示器上打印浮點值,但是我正在使用十進制值獲得正確的數據,但是現在當我嘗試打印浮點值時,不幸的是得到了上面提到的錯誤標題。

我正在嘗試編譯的浮點值代碼

switch (current_digit)
{
case 1:
 disp(fmodf (adc_value, 10000000));   //8   
 digitalWrite(digit_7, HIGH);  
 break;
 
case 2:
 disp(fmodf (adc_value, 1000000)% 10);   //7
 digitalWrite(digit_6, HIGH);  
 break;
 
case 3:
 disp(fmodf (adc_value, 100000)% 10);   //6
 digitalWrite(digit_5, HIGH);  
 break;
 
case 4:
 disp(fmodf (adc_value, 10000)% 10);   //5
 digitalWrite(digit_4, HIGH);  
 break;
  
case 5:
  disp(fmodf (adc_value, 1000)% 10); //4  
  digitalWrite(digit_3, HIGH); 
   digitalWrite(SegGDP,LOW); 
  break;

case 6:
  disp( fmodf (adc_value, 100) % 10);  //3 
  digitalWrite(digit_2, HIGH);        
  break;

case 7:
  disp( fmodf (adc_value, 10) % 10);   //2
  digitalWrite(digit_1, HIGH);   
  break;

case 8:
  disp(fmodf (adc_value, 10));   //1
  digitalWrite(digit_0, HIGH);  
}

參考:

  1. 浮點值引用

  2. 'double' 和 'int' 類型的無效操作數到二進制 'operator%'

fmodf返回一個浮點數。 所以

fmodf(adc_value, 1000000)% 10

仍將嘗試float % int

但是,該代碼可能不是您想要的。 相當於

(adc_value / 1000000) % 10

應該

fmodf(adc_value / 1000000.f, 10.f)
case 1:
 disp(fmodf (adc_value, 10000000));   //8   

您想要floor(adc_value / 10000000)代替,這將是 integer 除法adc_value / 10000000的浮點等價物。

case 2:
 disp(fmodf (adc_value, 1000000)% 10);   //7

浮點值和 integer 之間沒有% ,所以這里是你想要fmodf的地方,就像fmodf ( floor(adc_value / 1000000), 10)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM