Java乘以long和float数,哪个数据类型是结果?

时间:2015-10-08 19:33:37

标签: java declaration


有人可以解释为什么'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;

3 个答案:

答案 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将导致结果失去精度而你的程序将无法编译