Ansi C:打印长双精度变量的值为0.000000

4
当我运行下面的 Ansi C 程序时,会打印出一个值为“0.000000”。有人知道为什么值“561.308000”没有被打印出来吗?我正在使用 Dev-C++ 运行程序,并且我使用的编译器是:Mingw port of GCC(GNU Compiler Collection),版本 MSVCRT 2.95.2-1。
#include <stdio.h>
#include <stdlib.h>

main()
{
    long double x = 561.308;
    printf("%Lf",x);
}

1
它在Wandbox上运行良好。你用的是什么编译器? - MikeCAT
我正在使用Dev-C++5.11。 - Spacedog789
1
在 Dev-C++ 5.11 和 gcc (GCC) 4.8.1 上会打印出 -0.000000 - MikeCAT
1
这是特定于实现的行为。说你正在使用GCC并不意味着你在使用哪个版本的GCC,但正如MikeCAT所注意到的那样,至少我们知道4.8.1正在显示-0.000....存在大量潜在问题。Microsoft的C运行时不支持80位浮点数(尽管我没有检查过最近的版本),这意味着它们有时会将long double映射到double。由于这个原因,long double说明符不应被认为是非常可移植的。__mingw_printf是一个可能有帮助的版本。 - JVene
1
@JVene似乎在说的更好的表达方式是,您的编译器和libc(“C运行时库”)可能对long double的含义存在歧义。 mingw就是这样一个混乱的情况... - R.. GitHub STOP HELPING ICE
显示剩余8条评论
2个回答

1

使用此命令在Windows 7 64位上使用 gcc (GCC) 4.8.1 进行编译是可行的。(将选项中添加-std=c99以使编译器与C99配合工作)

gcc -Wall -Wextra -std=c99 test.c -o test.exe


为什么C99会有所不同?据我所知,long double在C90中已经被允许了。 - Lundin
实际上,在 Mingw 64 gcc 4.9.1 上这并不起作用。打印出零。 - Lundin

0

零可能是main()函数的返回值 它会被打印出来 你能试试:

printf("Answer is : %Lf",x);

查看您是否得到了0.000000或答案为:0.0000

还有呢?

printf("Answer is : %Lf", 561.38888);

我有这个:

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

int main(void)
{
    long double x = 561.308;
    printf("%Lf",x);
   return 0;
}

当我尝试了你的第一个建议并打印输出时,得到的数值是:答案是:0.000000。 - Spacedog789
当我尝试了你的第二个建议后,打印出来的值是:答案是:561.388880。 - Spacedog789
@Spacedog789,你能试一下我上传的代码吗? - AlbertFG
我编译了您上传的代码并运行它。这是打印出来的内容:0.000000。 - Spacedog789

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接