#include <stdio.h>
int main()
{
double x = 5.16894;
printf("%f\n",(int)(x*1000+0.5)/(double)1000);
}
为啥最后把计算结果转换为了int类型但输出的值是5.169000呢,转换成int不是跟前面的格式控制%f不一致了吗
强制类型转换优先级高,先转换,后做除法
除法的除数是double,返回浮点
严格来说,应该用 lf 不是 f
引用gpt回答 很详细 有帮助采纳一下
在这个代码中,x的值是5.16894。
语句(int)(x1000+0.5)的作用是对x四舍五入到小数点后3位。
x1000将小数点右移3位,变成5168.94。
然后加上0.5作为四舍五入,结果是5169.44。
将其转换为int类型,就变成了5169,实现了四舍五入。
但是打印语句使用了%f来输出,这会显示一个double类型的浮点数。
所以即使运算结果是int类型,在打印时还会被转换成double类型再输出,从而显示了小数点后的0。
也就是说:
printf("%d\n", (int)(x*1000+0.5)/(double)1000);
或者也可以计算时保留为double类型:
printf("%f\n", (x*1000+0.5)/1000);
需要注意计算过程和打印格式的类型一致性,才能保证运行结果符合预期。
#include <stdio.h>
int main()
{
double a=1.0;
printf("%f\n",a/3);
return 0;
}
运行结果: