Casting Variables in C (No, You’re Not Just Bad at Math)

Dara Monasch / Thursday, January 31, 2013

Warning: I always assume that every error in my programming occurs because I am terrible at math. You can therefore imagine my shock and excitement when I learned that one of my very first errors was NOT due to my lack of mathematical prowess. So without further ado, Casting Variables in C…

What *is* Casting?

Casting is the act of taking one variable type and forcing a variable of another type to adopt its’ attributes in one specific instance.

For example:

int numerator = 20;
int denominator = 7;
float diff = numerator/denominator;

So this program is dividing 20 by 7, so the result should be 2.86 (rounded to 2 places), right?

WRONG!

But… why?!

Well, C looks at  your lines of code with a specific order of precedence, and since the = is pretty low on the totem pole so to speak, your mathematical equation on the right is handled before the type of your answer is considered. So, when you perform a mathematical operation with two integers in C, even if you tell the program to cast the result as a float, it will do the math first, truncating its result at the integer value. Then, it will use that truncated integer result of the equation and convert it into a float.

So, how do you fix it?

This is where the casting comes in! It turns out that all you need to do is tell C that one of your integers should be treated as a float during your operation and voila! C knows that both items must become floats for the mathy goodness to work and thus, your problem is solved.

For example:

int numerator = 20;
int denominator = 7;
float diff = (float)numerator/denominator;

There you have it! The #epiphany I came to from the first debugging instance of my CS50x class.

Questions/Comments?

Feel free to comment here on my blog, or find me on Twitter @DokiDara.

By Dara Monasch