当前位置: 首页 > 知识库问答 >
问题:

为什么当浮点a=2.3[重复]时,如果(a==2.3)计算为false

朱通
2023-03-14
#include<stdio.h>

void main()
{
    float a = 2.3;
    if(a == 2.3) {
        pritnf("hello");
    }
    else {
        printf("hi");
    }
}
#include<stdio.h>

void main()
{
    float a = 2.5;
    if(a == 2.5)
        printf("Hello");
    else
        printf("Hi");
}

上面印着你好。

共有1个答案

阮桐
2023-03-14

变量afloat,它保存一些接近数学值2.3的值。

文字的2.3是一个double,它也保存一些接近数学值2.3的值,但是因为doublefloat具有更高的精度,所以这个值可能与a的值不同。floatdouble都只能表示有限数量的值,因此必然有数学实数不能用这两种类型中的任何一种精确表示。

在比较A==2.3中,左操作数float提升为double。这个提升是精确的,并且保留了值(和所有提升一样),但是正如上面讨论的,这个值可能不同于2.3文本的值。

assert(a == 2.3f);
//             ^
 类似资料:
  • 问题内容: 如果我尝试这样做: 我得到以下输出: 演示:http://codepad.org/ncVuJtJu 这是为什么? 我希望将其作为输出: 我的理解: 但是为什么不输出呢? 问题答案: 所有解释为什么得到2而不是1的答案实际上都是错误的。根据PHP文档,混合并以这种方式是不确定的行为,所以你可以得到1或2切换到不同版本的PHP可能会改变你得到的结果,这将是一样有效。 请参阅示例1,其中显示

  • $A()函数能把它接收到的单个的参数转换成一个 Array 对象。 这个方法,结合被本类库扩展了的 Array 类,能方便的把任何的可枚举列表转换成或拷贝到一个 Array 对象。一个推荐的用法就是把 DOM Node Lists 转换成一个普通的 Array 对象,从而更有效率的进行遍历,请看下面的例子。 <script> function showOptions(){ var some

  • 我这样问是因为我知道检查列表是否为空的python方法如下: 将打印,等等。因此,这导致我用真值识别;但是,如果我试图“直接”比较[]和False,我会得到以下结果: 等 这到底是怎么回事?我觉得我错过了一些非常明显的东西。

  • 问题内容: 我可以用吗: 代替 后者似乎太冗长。有区别吗? 问题答案: 该声明 将调用(请参阅特殊方法名称文档)并使用该函数的返回值。总结如下: 要求执行真值测试和内置操作;应该返回或,或者它们的整数等效值或。如果未定义此方法,则调用该方法(如果已定义),并且如果其结果为非零,则将该对象视为true。如果一个类既未定义,也未定义,则其所有实例均被视为true。 另一方面, 仅 将参考与进行比较以查

  • 问题内容: 为什么以下两个语句的结果不同? 编辑: 我应该补充一点,我怀疑将“ 0”第一条语句强制转换为要比较的布尔值-这应该与“‘0’== true”完全相同,显然这是不正确的。 问题答案: 首先,为了完整性: 是的,因为是一个非空字符串,这始终计算结果为: 字符串:如果参数为空字符串(其长度为零),则结果为 false; 否则为 false 。否则结果为 true 。 现在到。 这里将进行两次

  • 我总是假设当执行时,优化器自然会使用有效的按位操作,就像我写了