C中长双精度的转换说明符
长双精度数据类型可以在C中包含这些转换说明符:%Le、%Le、%Lf、%Lg、%Lg 我编写了一个小程序来测试:C中长双精度的转换说明符,c,mingw,C,Mingw,长双精度数据类型可以在C中包含这些转换说明符:%Le、%Le、%Lf、%Lg、%Lg 我编写了一个小程序来测试: #include <stdio.h> int main(void) { long double d = 656546.67894L; printf("%.0Le\n",d); printf("%.0LE\n",d); printf("%.0Lf\n",d); printf("%.0Lg\n",d); printf("%.0LG\n",d); r
#include <stdio.h>
int main(void) {
long double d = 656546.67894L;
printf("%.0Le\n",d);
printf("%.0LE\n",d);
printf("%.0Lf\n",d);
printf("%.0Lg\n",d);
printf("%.0LG\n",d);
return 0;
}
输出:
-0
-4E-153
-0
-4e-153
-4E-153
但是没有一个能给出所需的输出,正如您很容易理解的那样,即656547。原因是什么
使用的编译器是gcc版本3.4.2 mingw special。来自:
mingw使用microsoftc运行时
图书馆及其信息技术的实施
printf不支持“long”
“双”型。作为一个工作环境,你
可以投到“双倍”并通过
改为printf。例如:
请注意
“长期”也存在类似的问题
类型使用“I64”眼64
长度修饰符,而不是gcc的'll'
嗯,嗯。例如:
6年后编辑:另请参阅Keith Thompson的以下评论,了解解决方法:
在源文件中定义uuu USE_MINGW_ANSI_STDIO 1,或将命令行更改为gcc-D_uuuse_MINGW_ANSI_STDIO=1
MinGW C库是由MSVCRT.DLL提供的,它是Windows附带的,实际上是旧的VC++6.0库
MIWW不过使用GNU C++库,尽管依赖于底层C库,但它支持使用IoSokes输出的长双倍。即使您不希望使用C++,也可以使用足够的支持这个能力。
使用明文W64与体系结构I68 6x8664不能工作,也许是解决方案。我试过了,效果很好 以下是编译信息: 以下是我的代码:他们似乎都做了我期望的事情。期望的输出是什么?你不会相信这一点,但是不包含是未定义的行为,程序可以自由地做任何事情。不过,出于最实际的目的,我敢打赌编译器会为您滑入include,而您的真实代码中确实还有其他内容。对于double,%.0lf做什么?!对于给定的d,我希望输出为:656547@dirkgently:您没有理解我的意思,我知道隐式声明可能导致的问题,我只发布了一部分。@Gonzalo:我不知道为什么,但我没有得到输出。我知道这一点,我不关心舍入,但我想知道为什么问题会持续很长时间?好的。更新我的答案,给你你想要的:-谢谢,那是明的错!有一个解决方法:在源文件中定义uu USE_MINGW_ANSI_STDIO 1,或者将命令行更改为gcc-D_uuse_MINGW_ANSI_STDIO=1。不,我使用的MINGW特别版不支持长双精度。我的意思是它给出了与以前相同的错误结果。
printf("value = %g\n", (double) my_long_double_value);
printf("value = %I64d\n", my_long_long_value);
||=== Build: Debug in TeaErr (compiler: GNU GCC Compiler) ===|
D:\Practice\TeaErr\main.c||In function 'main':|
D:\Practice\TeaErr\main.c|7|warning: unknown conversion type character 'L' in format [-Wformat=]|
D:\Practice\TeaErr\main.c|7|warning: too many arguments for format [-Wformat-extra-args]|
D:\Practice\TeaErr\main.c|7|warning: unknown conversion type character 'L' in format [-Wformat=]|
D:\Practice\TeaErr\main.c|7|warning: too many arguments for format [-Wformat-extra-args]|
D:\Practice\TeaErr\main.c|8|warning: unknown conversion type character 'L' in format [-Wformat=]|
D:\Practice\TeaErr\main.c|8|warning: too many arguments for format [-Wformat-extra-args]|
D:\Practice\TeaErr\main.c|8|warning: unknown conversion type character 'L' in format [-Wformat=]|
D:\Practice\TeaErr\main.c|8|warning: too many arguments for format [-Wformat-extra-args]|
||=== Build finished: 0 error(s), 8 warning(s) (0 minute(s), 1 second(s)) ===|
#include <stdio.h>
#include <stdlib.h>
int main()
{
long double a;
scanf("%Lf",&a);
printf("%Lf\n",a);
return 0;
}