C语言中double类型数据的输入和输出

 Hygge   2021-02-10 18:12   84 人阅读  0 条评论

现象是这样:

double a;
scanf("%f",&a);   //应用scanf("%lf",&a);

实行上头语句时,发现double类型的输入不能应用%f进行输入,得用%lf才能正常获得a的值。

而在输出double类型时却可以用%f,这是由于printf("%f",a);在实行时C主动将double型的参数转换成flaot型。

为什么使用 %lf可以解决问题嘞?因为l表示将相应的参数按 long 或 unsigned long 类型输出,那么lf就等同于long float,又经过查询发现

long float是以前的C语言(传统C语言)用的类型,与 double 同义,在老式的C语言编译器可能会允许该类型,但现在已经被 double 替换掉,C89标准就已经删除了该类型,因此在比较新的C编译器用这个类型时,编译可能会报错。不建议用这个类型,用 double 替换。

所以总结一下:
输入时由于float和double都使用%f进行读入,在读入double类型时存在低精度转高精度的问题,所以要使用老式的double等价形式%lf来读入。
而在输出时使用%f来输出double类型可以,是因为有自动的转换,将double类型转换为float类型进行输出,此时是高精度转低精度。


本文地址:https://blog.lisok.cn/post/21.html
版权声明:本文为原创文章,版权归 Hygge 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?