繁体   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