的长双数据类型可以在C这些转换说明:%乐,%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);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
-0
-4E-153
-0
-4E-153
-4E-153
但没有人能提供所需的输出,即656547(你可能很容易理解).是什么原因?
使用的编译器是gcc版本3.4.2(mingw-special).
Gon*_*alo 11
来自一个古老的mingw维基:
mingw使用Microsoft C运行时库,它们的printf实现不支持'long double'类型.作为解决方法,你可以强制转换为'double'并将其传递给printf.例如:
printf("value = %g\n", (double) my_long_double_value);
Run Code Online (Sandbox Code Playgroud)
请注意,"long long"类型存在类似的问题.使用'I64'(眼睛六十四)长度修改器而不是gcc的'll'(椭圆).例如:
printf("value = %I64d\n", my_long_long_value);
Run Code Online (Sandbox Code Playgroud)
编辑(6年后):另请参阅以下Keith Thompson的评论以获得解决方法:
#define __USE_MINGW_ANSI_STDIO 1在源文件中或将命令行更改为gcc -D__USE_MINGW_ANSI_STDIO=1
| 归档时间: |
|
| 查看次数: |
3808 次 |
| 最近记录: |