声明Java乘法长和浮点数,结果是哪种数据类型?
有人能解释为什么“c”必须是双精度的,尽管“0.2f”将其定义为浮点
我以为“f”代表浮点数
对不起,如果这是一个愚蠢的问题,但我想知道
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;
# 1 楼答案
在您的示例中,您使用了三种类型:double、float和long。因此,您必须将c声明为double,因为double比float大,但如果您只使用
那么c只能是浮点,不能是长的,因为将c声明为long将使结果失去精度,并且您的程序将无法编译
# 2 楼答案
那是因为
3.1415926
是一个双常数。所以表达式(3.1415926 * 0.2f)
给出了一个双精度结果,当乘以long时仍然是双精度的顺便说一句,如果你想乘以π,最好使用
Math.PI
# 3 楼答案
这是因为浮点数的默认类型是编译器的两倍(因此3.14考虑为double):