# Q：java乘长浮点数，它的数据类型的结果？

can someone explain why 'c' has to be a double although "0.2f" is defining it as float?
I thought the 'f' stands for a float number.
Sorry if this is a stupid question but I am wondering..

``````    a = 4294967296L;
b = 'n';
c = (3.1415926 * 0.2f) * a;
``````

=>

``````    long a = 4294967296L;
char b = 'n';
float c = (3.1415926 * 0.2f) * a;
``````

change 'c' to double =>

``````    long a = 4294967296L;
char b = 'n';
double c = (3.1415926 * 0.2f) * a;
``````

can someone explain why 'c' has to be a double although "0.2f" is defining it as float?
I thought the 'f' stands for a float number.
Sorry if this is a stupid question but I am wondering..

``````    a = 4294967296L;
b = 'n';
c = (3.1415926 * 0.2f) * a;
``````

= & gt；

``````    long a = 4294967296L;
char b = 'n';
float c = (3.1415926 * 0.2f) * a;
``````

change 'c' to double = & gt；

``````    long a = 4294967296L;
char b = 'n';
double c = (3.1415926 * 0.2f) * a;
``````

That's because 3.1415926 is a double constant. So the expression (3.1415926 * 0.2f) gives a double result which when multiplied by a long is still double.

Btw. if you wanted to multiply by pi, better use Math.PI.

This is because the default type for floating point number is double by the compiler (so the 3.14 consider as double):

``````// cant compile  3.14 is double and double*something = double
float c = (3.1415926 * 0.2f) * 4294967296L;

// this is ok ( 3.14 is now float and not double.
float c = (3.1415926f * 0.2f) * 4294967296L;
``````

``````// cant compile  3.14 is double and double*something = double
float c = (3.1415926 * 0.2f) * 4294967296L;

// this is ok ( 3.14 is now float and not double.
float c = (3.1415926f * 0.2f) * 4294967296L;
``````

In your example you are using three kind of types: a double, a float and a long. So because of it you have to declare c as a double since double is bigger than float but if you just use

``````long a = 4294967296L;
char b = 'n';
float c =  0.2f * a;
``````

then c can only be float and not long because declaring c as long will make lose precision to the result and you're program won't compile

``````long a = 4294967296L;
char b = 'n';
float c =  0.2f * a;
``````

java  declaration