为什么把f改成d以后结果就变成0了呢,不是取浮点数小数点左边的数作为结果吗

#include <stdio.h>

int main()
{
        double result = 1.0; 
        result += 2.6; 
        result ++; 
        result * 5; 
        result = (int)(result + 0.5);
        
        printf("%d", result);//为什么把f改成d以后结果就变成0了呢,不是取浮点数小数点左边的数作为结果吗
        
        return 0;
}

你这不是强制类型转换,是把double型的数据里的4个字节拿出来当int型输出

printf()函数中的输出格式一定要和相应的输出参数类型匹配,比如%d对应的参数类型是int,%f对应的参数类型是float,%lf对应的参数类型是double
如果类型不匹配,输出的结果可能不是你想要的。
https://en.cppreference.com/w/c/io/fprintf

至于为什么你程序输出结果变成0,这是由x64调用规则引起的。x64调用规则规定函数参数从左往右头4个参数用寄存器传递,其余参数用栈传递。对于头4个参数,浮点类型依次用寄存器xmm0, xmm1, xmm2, xmm3传递,而其他类型(包括整型)则用RCX, RDX, R8, R9传递。当你把result传给printf()函数是,其值是先存储在xmm1寄存器(result是第二个参数,所以是xmm1寄存器)供printf()提取,而在printf()函数里发现输出格式是%d,它认为你传的数据是整型,它从RDX提取数据,因此输出结果就错了。

参考
https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention?view=msvc-170