我在嵌入式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/

10-13 07:24