在C语言中比较双精度浮点数的值

4

为什么输入值为999999时,它总是会进入else语句呢?有人能解释一下原因并说明正确的方法吗?

#include <stdio.h>

int main(int argc, char **args)
{
    double dValue = 0;

    scanf("%d",&dValue);

    if(10000 < dValue){
            printf("More than");
    } else {
        printf("Less than");
    }

    return 0;
}

4
%d -> %lf,请打开编译器警告。 - Mysticial
@wallyk 谢谢。我改成了 %lf,现在可以了。但是我打印 dValue 的值时,它仍然打印出了 999999。为什么当我尝试将其与另一个整数值比较的 if 语句中进行比较时,它仍然是错误的? - Azuan
@Azuan:你输入99999或999999,程序会打印“小于”?这是你的意思吗? - wallyk
@wallyk 假设我使用与上面相同的代码。然后我输入999999。为什么它仍然跳过if语句?10000 < 999999不应该是真的吗? - Azuan
@Azuan:是的,应该打印出“More than”。它实际上做了什么? - wallyk
显示剩余4条评论
1个回答

7

如果你打算将值作为整数读取(使用"%d"),那么你应该将其声明为int。如果你打算将值作为double读取,则应该改用"%lf"作为scanf格式说明符。


@Azuan 你是如何尝试打印 dValue 的? - reuben
我使用%d来打印值,因为我使用%d来进行scanf。假设我使用与上面相同的代码。然后我输入999999。为什么它仍然跳过if语句?10000 < 999999不应该是真的吗? - Azuan
@Azuan 为了明确起见,您是说您已经修复了错误,将 dValue 声明为 int,使用 "%d"scanf 一起,输入一个大于10000的数字,并且您看到了 if 条件的 else 分支被执行? - reuben
@Azuan 修复这个 bug。这个 bug 导致数值混乱。 - reuben
我认为您输入的数字超过了int类型的最大值。因此,编译器会计算其等效值,并且结果小于10000。假设您输入的是20000,而您允许的最大整数值为19000(假设)。那么20000将被视为-1000。而-1000小于10000。整数的大小取决于编译器。请检查您的编译器的整数最大值。 - Narendra
显示剩余2条评论

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