我在嵌入式STM32F437VI上编写了c语言。在某些时候,我需要将一些包含数字的字符串解析为浮点数。我使用atof,并且总是可以得到正确的结果,除了这种奇怪的情况。如果字符串是0或0.0,则给出2。
我已经包含了stdlib.h,甚至尝试了(float)atof()进行类型转换,但是出于某些奇怪的原因,float变量始终具有atof(“ 0”)操作的值2,并且double值具有正确的0。
为什么会这样呢?谢谢大家。
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
char test[] = "0";
float val1;
double val2;
val1 = atof(test);
val2 = atof(test);
return 0;
}
我希望float变量也能得到0的明显结果,但它会保持固定的2值。
更新:
该代码节是一个更大的项目的一部分,对项目进行详细说明是没有意义的。我有带有LDFLAG选项的自定义Makefile
"-mfloat-abi=hard -mfpu=fpv4-sp-d16 -u _printf_float".
这会影响这个问题吗?
就MCV示例而言,在main.c中,我具有上面的代码部分,并且得到了提及的结果。
有人能想到atof()以这种方式表现的任何原因吗?
当然,我也使用完全相同的代码使用了在线c编译器,结果当然是0。我想如果stdlib库有什么问题,那么atof()在所有其他情况下也将不起作用。但是它仅对于“ 0”失败,并且仅将结果2分配给float变量。
我使用Ozone调试器软件实时查看变量。
原因可能是在STM32F4 MCU上使用的浮点实现吗?自定义Makefile中缺少参数还是类似的东西?
最佳答案
首先,您的问题缺少Minimal, Complete, and Verifiable example。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char test[] = "0";
float val1;
double val2;
val1 = atof(test);
printf("%f\n", val1);
val2 = atof(test);
printf("%f\n", val2);
}
输出:
0.000000
0.000000
或者您的标准库实现是fubar。
关于c - atof(“0”)在float变量中返回2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54252773/