You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何float变量存储0.7后与0.7不相等?0.5却相等?

浮点数比较的常见问题解析

为什么0.7与0.7比较结果不相等?

  • C语言里,直接写的0.7默认是double类型(双精度浮点数),而代码中的x是float类型(单精度浮点数)。
  • 0.7这个十进制数无法用二进制浮点数精确表示,float和double的存储精度有差异:float仅保留23位有效尾数,double则有52位。把0.7赋值给float变量x时,会被转换成float能容纳的近似值;而if判断里的0.7是double类型的近似值,这个值比float版本的0.7更精确,两者存储的二进制值并不相同,所以x == 0.7的结果为假,输出B。

为什么x改为0.5时输出变为A?

  • 0.5是2的负一次方(1/2),这类数可以用二进制浮点数精确表示。
  • 不管是float还是double类型,存储0.5时的二进制值完全一致,没有精度损失。所以当x是float类型的0.5,和double类型的0.5比较时,两者实际值完全相等,x == 0.5结果为真,输出A。

开发提示

实际写代码时,永远不要直接用==比较两个浮点数是否相等,应该通过判断两者的差值是否小于一个极小的阈值(比如1e-6)来判断近似相等,示例代码:

#include <stdio.h>
#include <math.h>

int main()
{
    const float x = 0.7;
    if (fabs(x - 0.7) < 1e-6) {
       puts("A");
    } else {
       puts("B");
    }
}

内容的提问来源于stack exchange,提问作者Tiyasa Mandal_CSE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:32:02