Reputation: 19418
Why we can not store the division result of two integers into the float variable ?
int a = 100;
int b =50;
float temp = b/a;
it gives t= 0 !
also i did
int temp = b/a;
it gives t= 0 !
but when I did
float temp = (float)b / (float)a;
it gives proper result. Why so ?
Upvotes: 6
Views: 18974
Reputation: 31722
The below statement means, you are casting your integer values into float before staring the operation
float temp = (float)b / (float)a;
So could be seen as below
float temp = (float)50 / (float)100;
then
float temp = 50.0 / 100.0 ;
And result
temp = 0.5;
Upvotes: 3
Reputation: 54806
The reason why float temp = b/a;
gives 0 while float temp = (float)b/a;
gives 0.5 is that the compiler determines the output type of the division operation based upon the types of the operands, not the destination storage type. Put simply:
int / int = int
float / int = float
int / float = float
float / float = float
So when you do float temp = b/a;
you're doing in integer divide of b
and a
, and then storing the resulting integer (0 in your example) into a variable of type float
. In essence, by the time the value is converted to floating-point you have already lost the information you are looking for (assuming you wanted to do a floating-point divide), and the conversion is not going to bring it back.
In order to get the result you want (again, assuming that you want to do a floating-point divide), you need to cast at least one of the operands to float
before you divide.
Upvotes: 21
Reputation: 26390
In your case 50/100 is 0.2. By obtaining the result for two integer numbers the result will also be in integer form so it truncates the decimal part giving you 0 alone. But in case of float it is considered as a floating division so you will get 0.2
Upvotes: 2
Reputation: 1281
Its integer division - 50/100 is 0, the remainder (can use modulus) is 50.
You will need to use floats, whether you cast from int or start with them is up to you.
Upvotes: 3