在给定程序中,为什么每个printfs 得到不同的结果?
#include <stdio.h>
int main()
{
float c = 4.4e10;
printf("%f\n", c);
printf("%f\n", 4.4e10);
return 0;
}
它显示以下输出:
44000002048.000000
44000000000.000000
这个转换方法有什么名字吗?我想读一读。
—
user10056563
您是否想知道从C 转换
—
Eric Postpischil,
double到的时间float?还是您想知道转换产生的值,即转换产生了什么影响?或者是其他东西?
我既不质疑这里的答复,也不质疑标准,但是,当我还年轻的时候,
—
阿德里安·摩尔
C我们就使用printf("%f",x)了a float和printf("%lf",x)a double。什么时候变了?以及如何显式地打印一个(单个)float- printf("%hf",x)?
%lfprintf中的@Adrian 与相同%f。甲float在可变参数被转换为一个double由编译器,就像一个short被转换成一个int。
4.4e10是一个double常量,float在初始化时转换为常量,c但double在传递到时保持为aprintf。但是,您可能还想知道,添加f后缀使其成为float常数:打印4.4e10f将显示与初始化c到相同的值4.4e10f。将float常量与double常量区分开对使用浮点算法进行质量工作很重要。