单片机C 浮点数转化为字符数组问题

在STM32的科学计算器项目中,由于内存限制,无法使用atof等函数,需要自实现浮点数转换。在将计算结果的double型转为字符数组时,出现222转为221.99999999的误差问题。通过理解浮点数存储和编译器影响,采用加偏差值的方法解决了这个问题。
摘要由CSDN通过智能技术生成

单片机C 浮点数转化为字符数组问题

最近遇到个用stm32做科学计算器的项目,遇到很多问题。因为这个计算器还要有其他功能,所以最后留给计算器部分的内存有点少,这就使程序中不能使用atof、printf、sscanf这类不安全的程序(基本一使用就会报Hard Fault),只能自己实现这些转换算法。前面字符数组转double型还好,在最后计算结果double型转显示字符数组的时候,碰到了浮点数误差问题,比如222会转成221.99999999。这包含了浮点数存储问题和编译器的问题,最后还是使用加偏差值的方法来解决。

//偏差值
#define Double_Deviation        -0.00000001
//double转换显示字符数组 数组长度
#define Double2Chars_MaxLenght  17

int Numprc_Double2Int_UnitDigit(double num);
//浮点数转显示字符数组
void Numprc_FtoA(double num, char* str) {
    int exp = 1, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值