鱼C论坛

 找回密码
 立即注册
查看: 3735|回复: 2

[已解决]DEV-C++使用%Lf、%Le打印long double型浮点数时出现错误

[复制链接]
发表于 2018-9-28 09:49:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main(void)
{
        float aboat=32000.0;
        double abet=2.14e9;
        long double dip = 5.32e-5;
        
        printf("%f can be written %e\n",aboat,aboat);
        printf("and it's %a in hexadecimal,powers of 2 notation\n",aboat);
        printf("%f can be written %e\n",abet,abet);
        printf("%Lf can be written %Le\n", dip, dip);         /*这里有问题,不知道怎么回事。 */
        
        return 0;
}

输出为:
32000.000000 can be written 3.200000e+004
and it's 0x1.f40000p+14 in hexadecimal,powers of 2 notation
2140000000.000000 can be written 2.140000e+009
0.000000 can be written 3.205284e-317

求解答
最佳答案
2018-9-28 10:18:54
本帖最后由 pheron 于 2018-9-28 10:31 编辑

这就是位数问题了,编译器的毛病,而最终的锅在微软的运行库背上。微软对C语言不太友好,很多运行库都是32位的,如果你用Linux的话,这一行不会出错,而上一行会报警告。
事实上你的上一行有点问题:
%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号。
其中:
float,单精度浮点型,对应%f.
double,双精度浮点型,对应%lf.

在用于输入时:
double 类型使用了%f格式,会导致输入值错误。
float类型使用double类型不仅会导致输入错误,还可能引起程序崩溃。

至于long double,需要要用%Lf,注意L必须大写。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-28 10:18:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 pheron 于 2018-9-28 10:31 编辑

这就是位数问题了,编译器的毛病,而最终的锅在微软的运行库背上。微软对C语言不太友好,很多运行库都是32位的,如果你用Linux的话,这一行不会出错,而上一行会报警告。
事实上你的上一行有点问题:
%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号。
其中:
float,单精度浮点型,对应%f.
double,双精度浮点型,对应%lf.

在用于输入时:
double 类型使用了%f格式,会导致输入值错误。
float类型使用double类型不仅会导致输入错误,还可能引起程序崩溃。

至于long double,需要要用%Lf,注意L必须大写。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-9-28 10:43:40 | 显示全部楼层
pheron 发表于 2018-9-28 10:18
这就是位数问题了,编译器的毛病,而最终的锅在微软的运行库背上。微软对C语言不太友好,很多运行库都是32 ...

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-30 10:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表