2015-10-08 50 views
0


有人可以解释为什么'c'必须是双重的,虽然“0.2f”将其定义为浮动吗?
我认为'f'代表浮点数。
很抱歉,如果这是一个愚蠢的问题,但我想知道..Java乘法long和float数,哪个数据类型是结果?

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

=>

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

变化 'C' 翻一番=>

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

回答

3

这是因为3.1415926是一个双常数。所以表达式(3.1415926 * 0.2f)给出了一个双倍的结果,当乘以长时仍然是双倍的。

Btw。如果你想乘以pi,最好使用Math.PI

0

这是因为浮点数的默认类型是由编译器双(所以3.14考虑为双):

// 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; 
0

在您的例子使用的是三种类型:双,一浮动并且很长。所以,因为它必须声明C作为双,因为双比浮动大,但如果你只是用

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

那么C只能是浮不长,因为将c声明只要将丢失精度的结果和你的程序不会编译

相关问题