【问题标题】:0.7 is not less than 0.7 but wrong result gets printed [duplicate]0.7 不小于 0.7 但打印错误结果 [重复]
【发布时间】:2014-08-23 11:11:45
【问题描述】:

这里 'a' 应该打印为 0.7

#include<stdio.h>
void main()
{
  float a=0.7;
  if(a<0.7)
    printf("c");
  else
    printf("a");
}

【问题讨论】:

  • int main(void),不是void main()
  • a 是浮点数,而 0.7 是双精度数。
  • 尝试printf("float a %0.20e 0.7 %0.20e\n", a, 0.7); 看看真正比较的是什么。然后考虑floatdouble 的更多限制精度。
  • @0xdeadbeef 这已经是重复的了。因此这个问题是重复的:)

标签: c comparison


【解决方案1】:

您似乎误解了浮点数。见this question

你可以做的一件事是想“嗯,它永远不会精确地 0.7,所以也许我不能确定,但​​我可以接近。 ..

然后,您选择一个粒度,例如百万分之一。您可以尝试比较 ie6 * ainteger 舍入结果与 1e6 * 0.7integer 舍入结果,以查看不是“是a &lt; 0.7?”,而是“ a 是否合理,足够接近,小于 0.7?”

或者,只是比较相同的类型。正如 cmets 中所说,也许 0.7 不是 float 文字而是 double 文字。确保它是一个 float 字面量,并打印了 'a'

void main()
{
  float a=0.7;
  if(a<0.7f)
    printf("c");
  else
    printf("a");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    相关资源
    最近更新 更多