【问题标题】:how to printf long double in C? [duplicate]如何在 C 中 printf long double? [复制]
【发布时间】:2015-01-23 23:48:19
【问题描述】:

[更新] 无论我使用lfLfllf...我使用代码块编译和运行我的 C 程序,结果仍然相同。我正在使用 GNU GCC 编译器。

我尝试在不同的计算机(包括两台 Windows 和一台 Mac)上 printf long double float 类型,但事实证明它们都没有像我预期的那样工作。代码如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    double d = 6.232345235;   //8 bytes
    long double ld = 5.5767458458;

    printf("%lf\n", ld);
    return 0;
}

返回值要么是 -0.000000,要么是另一个我现在不记得的非常大的负数。

非常感谢任何帮助! :D

【问题讨论】:

  • 你使用的是什么编译器,你是如何调用它的?
  • 是的,我以前看过那个帖子,但它并没有解决我的问题......
  • 我正在使用 GNU GCC 编译器
  • 你是直接从命令行调用编译器吗?

标签: c double


【解决方案1】:

printf()long double 的正确格式说明符@ 是"%Lf"

【讨论】:

  • 不,它也不是这样工作的......无论我使用 lf 还是 Lf,它都会给出相同的结果......我期待其他解释或测试我可以做
  • @elfsummer:那么您需要确定您正在使用的编译器、C 库和平台。 C 标准说"%Lf"long double 是正确的。如果这在您的系统上不起作用,那么(a)您的系统已损坏或(b)您犯了一个错误,例如在编辑后没有重新编译。恕我直言,(b)比(a)更有可能,尽管另一个实际上并非不可能。但是如果没有相反的证据(实际代码、示例输出),很难相信您的实现是那么糟糕。
  • a) 我认为我的系统没有损坏,因为我已经在三台不同但工作正常的计算机上使用代码块进行了尝试。 b) 我每次都点击“编译并运行”按钮
  • @elfsummer:我在 Mac OS X 10.9.4 上使用 GCC 4.9.1 编译了以下代码:#include &lt;stdio.h&gt; int main(void) { long double ld = 5.5767458458; printf("%.9Lf\n", ld); return 0; },当我运行它时,输出为 5.576745846,这是正确的(并且如果我打印的是 10 位而不是 9 位,我相信这也是正确的)。我还使用 XCode 6.1.1 中的 clang 进行编译,并使用 "%.13Lf" 获得指定的数字加上 3 个尾随零。
  • @elfsummer:请注意,"%lf" 实际上是 "%f" 的同义词,并且仅适用于 double,不适用于 long double。对于 Mac OS X,long double 是 16 字节的数量,而不是视频所述的 12 字节的数量。你能用更精确的 GCC 版本信息更新代码吗(gcc --version 告诉你)。
猜你喜欢
  • 2011-05-04
  • 2011-05-01
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多