将数据类型指定为int或float或double时的结果不同

时间:2017-12-17 01:27:05

标签: c

编译和运行此程序时,为什么我们得到“更大”而不是“等于”?我检查过,当我们将数据类型指定为int时,我们得到“Less”,当指定为double时,我们得到“Equal”。是什么原因?

#include <stdio.h>

int main(void)
{
    float g = 9.8;
    if (g == 9.8){
        printf("Equal");
    }
    else if (g < 9.8){
        printf("Less");
    }
    else{
        printf("Greater");
    }
    return 0;
}

1 个答案:

答案 0 :(得分:-1)

这是因为int truncates这个值,意味着它会删除小数部分而不进行舍入,因此将9.8转换为int (int) 9.8给出9。

g输入double时,它会返回equal,因为默认的十进制数是double

gfloat时,您对floatdouble进行了比较,这是不好的,因为double的精确点比float意味着它可能导致不匹配。

表达式中使用的值被视为double(双精度浮点格式),除非在末尾指定了'f'。所以表达式“g == 9.8”在右侧有一个double和float,它们在左侧以单精度浮点格式存储。在这种情况下,浮动被提升为双倍。双精度格式比单精度格式使用更多位进行精度。

更多here

但是,如果你这样做,你会得到平等:

#include <stdio.h>

int main(void)
{
    float g = 9.8;

    // Add the f to typecast to float
    if (g == 9.8f) printf("Equal");
    else if (g < 9.8) printf("Less");
    else printf("Greater");

    return 0;
}