有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

声明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;

共 (3) 个答案

  1. # 1 楼答案

    在您的示例中,您使用了三种类型:double、float和long。因此,您必须将c声明为double,因为double比float大,但如果您只使用

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

    那么c只能是浮点,不能是长的,因为将c声明为long将使结果失去精度,并且您的程序将无法编译

  2. # 2 楼答案

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

    顺便说一句,如果你想乘以π,最好使用Math.PI

  3. # 3 楼答案

    这是因为浮点数的默认类型是编译器的两倍(因此3.14考虑为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;