5angXR 发表于 2018-9-28 09:49:53

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

#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

求解答

pheron 发表于 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必须大写。

5angXR 发表于 2018-9-28 10:43:40

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

谢谢
页: [1]
查看完整版本: DEV-C++使用%Lf、%Le打印long double型浮点数时出现错误