[STM32F1] 浮点类型变量在stm32cube_ide中不正常

[复制链接]
150|5
地瓜patch 发表于 2025-10-8 11:30 | 显示全部楼层 |阅读模式
定义了一个浮点变量

float r = 3.14;

当调试时,r的值显示为3,通过使用if条件进行了验证。

if(r==3.14)

这个if条件不成立,这意味着ide中的浮点变量无法正常工作。

643757107 发表于 2025-10-8 21:49 | 显示全部楼层
你遇到的问题是浮点数在计算机中的精度表示问题,并不是 IDE 或编译器无法正常工作。
643757107 发表于 2025-10-8 21:49 | 显示全部楼层
实际上,由于 3.14 在十进制中是一个有限小数,但在二进制浮点数中可能无法精确表示,因此它会被存储为一个近似值。

当你用 if(r == 3.14) 判断时,要注意:

字面量 3.14 默认是 double 类型

r 是 float 类型

比较时,r 会被提升为 double,但它的精度比直接赋值的 double 低,因此可能不相等
643757107 发表于 2025-10-8 21:49 | 显示全部楼层
#include <stdio.h>

int main() {
    float r = 3.14;
    printf("r = %.10f\n", r);       // 打印更多小数位
    printf("3.14 = %.10f\n", 3.14); // 打印 double 类型的 3.14
    return 0;
}
643757107 发表于 2025-10-8 21:50 | 显示全部楼层
5655268e66c24811b3.png

看吧,知道为哈了吗
643757107 发表于 2025-10-8 21:51 | 显示全部楼层
这不是 IDE 或编译器的 bug,而是浮点数的本质特性。

不要直接用 == 比较浮点数,应使用误差范围比较。

在赋值和比较时注意类型一致(float 与 3.14f,double 与 3.14)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

1940

主题

15249

帖子

31

粉丝
快速回复 在线客服 返回列表 返回顶部