有人可以解释为什么'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'更改为double =>
long a = 4294967296L;
char b = 'n';
double c = (3.1415926 * 0.2f) * a;
答案 0 :(得分:3)
那是因为3.1415926
是一个双常数。所以表达式(3.1415926 * 0.2f)
给出了一个双重结果,当乘以一个long时仍然是两倍。
顺便说一下。如果你想乘以pi,最好使用Math.PI
。
答案 1 :(得分:0)
这是因为编译器的浮点数的默认类型是double(所以3.14认为是double):
def ask(q_list):
if qlist:
ask(q_list[1:]) if ask_question(q_list[0]) else ask(q_list)
答案 2 :(得分:0)
在你的例子中,你使用了三种类型:double,float和long。因此,你必须将c声明为double,因为double大于float,但是如果你只是使用
long a = 4294967296L;
char b = 'n';
float c = 0.2f * a;
然后c只能浮动而不能长,因为将c声明为long将导致结果失去精度而你的程序将无法编译