关于C中的浮点数和比较运算符

时间:2012-08-08 07:09:15

标签: c floating-point

int main()
{
    float lfResult = 19.893196;
    if(lfResult == 19.893196)
        printf("Works");
    else
        printf("does not work");

    getch();
    return 0;
}

输出:不起作用

为什么if条件失败?

3 个答案:

答案 0 :(得分:8)

在C浮动常量中,类型为double。尝试:

float lfResult = 19.893196f;
if(lfResult == 19.893196f)
                        ^

因此,常量19.893196的精度高于lfResult

  

6.4.4.2 - 4

     

未固定的浮动常量具有类型double 。如果完全由   字母f或F,它有float类型。如果由字母l或L表示,则为   有类型长双。

答案 1 :(得分:1)

你的文字是双重的,可以在任务中自由浮动。试试:

if(lfResult == 19.893196F)
  ...

答案 2 :(得分:0)

如果条件允许,可以将19.893196视为双倍。所以if条件失败了。

您应该尝试以下方式。

if(lfResult == 19.893196f)

我认为这会对你有所帮助。