当前位置:  开发笔记 > 编程语言 > 正文

C中long double的转换说明符

如何解决《C中longdouble的转换说明符》经验,为你挑选了1个好方法。

长双数据类型可以在C这些转换说明:%乐,%LE,%LF,%了Lg,%LG(参考).

我写了一个小程序来测试:

#include 
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).



1> Gonzalo..:

来自一个古老的mingw维基:

mingw使用Microsoft C运行时库,它们的printf实现不支持'long double'类型.作为解决方法,你可以强制转换为'double'并将其传递给printf.例如:

printf("value = %g\n", (double) my_long_double_value);

请注意,"long long"类型存在类似的问题.使用'I64'(眼睛六十四)长度修改器而不是gcc的'll'(椭圆).例如:

printf("value = %I64d\n", my_long_long_value);

编辑(6年后):另请参阅以下Keith Thompson的评论以获得解决方法:

#define __USE_MINGW_ANSI_STDIO 1 在源文件中或将命令行更改为 gcc -D__USE_MINGW_ANSI_STDIO=1


谢谢,那就是mingw的错!
有一种解决方法:在源文件中使用“ #define __USE_MINGW_ANSI_STDIO 1”或将命令行更改为“ gcc -D__USE_MINGW_ANSI_STDIO = 1”。
推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有