Maulik
Maulik

Reputation: 19418

objective c float values

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

Answers (5)

Jhaliya - Praveen Sharma
Jhaliya - Praveen Sharma

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

aroth
aroth

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

visakh7
visakh7

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

Josh
Josh

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

Rakesh Bhatt
Rakesh Bhatt

Reputation: 4606

int a = 100;
int b =50;
float temp = (float)b/a;

Upvotes: 3

Related Questions