错误消息:“float”和“int”类型的无效操作数到二进制“operator%”

Posted

技术标签:

【中文标题】错误消息:“float”和“int”类型的无效操作数到二进制“operator%”【英文标题】:Error Message : Invalid operands of types 'float' and 'int' to binary 'operator%' 【发布时间】:2020-09-24 07:49:44 【问题描述】:

环境: Arduino IDE (v1.8.13)

在我的一个项目中,我尝试使用浮点数据类型显示十进制温度值 (temp),此代码适用于 int 数据类型。任何人都可以帮我解决这个错误“'float'和'int'类型的无效操作数到二进制'operator%'”。我是编程初学者

作为参考,我在click here 和click here 进行了此故障排除

1:Float Data Type in Switch Statement但没有找到具体的解决方案。

提前谢谢你!

完整程序:

  switch (current_digit)
  
   case 1:
    disp((temp / 100) % 10);
    digitalWrite(Dig1, LOW);  // turn on digit 1
  break;

case 2:
  disp( (temp / 10) % 10);   // prepare to display digit 2
  digitalWrite(SegDP, LOW);  // print decimal point ( . )
  digitalWrite(Dig2, LOW);   // turn on digit 2
  break;

case 3:
  disp(temp % 10);   // prepare to display digit 3
  digitalWrite(Dig3, LOW);    // turn on digit 3


current_digit = (current_digit % 3) + 1;


  

【问题讨论】:

尝试使用fmod() 函数而不是% 运算符。 (或者更确切地说,fmodf() 函数,如果您使用的是 float 变量。) 如果您的任务是关于将运算符应用于错误类型的简单错误,则无需发布 200 行代码。请在发布问题之前进行自己的网络研究。特别是对于像arduino.cc/en/Reference/MathHeader 这样的琐碎事情,请参阅手册arduino.cc/reference/en/language/structure/arithmetic-operators/… 在这里你会发现:允许的数据类型:Int,...警告余数运算符不适用于浮点数! 无论如何你都不应该在 Arduino 上使用浮点数,因为没有 FPU 的 8 位苦味非常慢。如果您确实需要浮点(本示例中并非如此),那么您为该任务选择了错误的 MCU。 【参考方案1】:

如前所述,% 用于整数类型。

要获得第一个小数位,将您的值四舍五入,然后从您的值中减去该四舍五入的数字。将差乘以 10。您可以通过使用 floor 函数或转换为整数来消除小数。

简化示例:

12.5... -> 12
12.5... - 12 -> 0.5...
0.5... * 10 -> 5.00...
5.0... -> 5

或者将您的值转换为 char 数组。这将允许您方便地访问每个数字。 更改您的显示功能,使其采用 char 值。

【讨论】:

以上是关于错误消息:“float”和“int”类型的无效操作数到二进制“operator%”的主要内容,如果未能解决你的问题,请参考以下文章

错误:“int”和“<未解析的重载函数类型>”类型的无效操作数到二进制“operator/”

收到“UnsafeMutableRawPointer”类型的错误消息没有下标成员

错误:二进制表达式的操作数无效('float' 和 'float')

参数的无效“类型”(字符)

类型错误:+ 不支持的操作数类型:“int”和“元素”

指定的演员表无效 - 浮动