How to solve : error: invalid operands to binary % (have ‘float’ and ‘double’)

If you are trying to run modulo / remainder operator like below, there are higher chances you might get an error as “error: invalid operands to binary” The solution for this error is as mentioned below.

 $ vim using_mod.c 
[bash] #include <stdio.h> int main(void) { float num = 11.00; int remainder = num % 3.0; if (remainder == 0) { printf("number is divisible\n"); } else { printf("number is not divisible: Remainder = %d\n", remainder); } return 0; } [/bash]
 $ gcc using_mod.c 
using_mod.c: In function ‘main’:
using_mod.c:5:22: error: invalid operands to binary % (have ‘float’ and ‘double’)
  int remainder = num % 3.0; 

Solution : The remainder operator (otherwise known as the modulo operator) % is a binary operator (i.e., takes exactly 2 operands) and operates only on integer types (e.g., short, int, long, long long, etc).

Hence, we either need to change float to int, or typecast both the values before and after % operator. like

[c]
int remainder = (int)num % (int)3.0;
[/c]

The complete working program will look like as below,

 $ vim using_mod.c 
[bash] #include <stdio.h> int main(void) { float num = 6.00; int remainder = (int)num % (int)3.0; if (remainder == 0) { printf("number is divisible\n"); } else { printf("number is not divisible: Remainder = %d\n", remainder); } return 0; } [/bash]

Leave a Comment