在C中将字符串转换为float?

时间:2015-01-16 14:55:11

标签: c string file structure

是的,所以在我的C程序中,我有一个从文件中获取浮点值的函数,在这里我正在尝试反向,取出字符串并将其转换为浮点数。

 float PsSc = atoi(stock01[DataCount].defPsSc);

我知道我的错误,我认为它适用于整数和浮点数,但事实并非如此。

我试过了

 float PsSc = atof(stock01[DataCount].defPsSc);

这也不起作用。

所以,我的问题是:我可以用什么方法替换我现有的代码?是什么?

输入:1.45。预期产量:1.45,实际产量:1.00

编辑:

 printf("\nYour previous speed was : %.2f Metres per Second",PsSc);

3 个答案:

答案 0 :(得分:1)

您正在寻找strtod()函数系列。

strtod()不仅会将输入字符串转换为doublestrtof()floatstrtold()long double,还会告诉你停止解析输入字符串的确切位置(通过第二个参数)。

请注意,无论strtod()还是atof()是期​​望小数还是小数逗号,都依赖于区域设置...

#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <errno.h>

#include <stdio.h>

int main()
{
    // play with "." vs. "," to see why this might be your problem
    char * input = "1.45";

    // will take a pointer beyond the last character parsed
    char * end_ptr;

    // strto...() might give an error
    errno = 0;

    // convert
    float result = strtof( input, &end_ptr );

    if ( errno == ERANGE )
    {
        // handle out-of-range error - result will be HUGE_VALF
        puts( "out of range" );
    }

    if ( end_ptr != ( input + strlen( input ) ) )
    {
        // handle incomplete parse
        printf( "Unparsed: '%s'\n", end_ptr );
    }

    printf( "result: %.2f\n", result );
    return 0;
}

答案 1 :(得分:1)

为什么我们不应该使用atof

成功时,atof()函数将转换后的浮点数作为double值返回。如果无法执行有效转换,则函数返回零(0.0)。如果转换后的值超出可表示值的范围,则会导致未定义的行为

相反,我们应该使用strtod()

中的<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    char s[] = "1.45";
    printf("Float value : %4.2f\n",strtod(s,NULL));
    return 0;
}

它将正确打印1.45

请参阅此处的插图http://ideone.com/poalgY

答案 2 :(得分:0)

尝试使用更具体的sscanf

参考:http://www.cplusplus.com/reference/cstdio/sscanf/

float PsSc;

sscanf(stock01[DataCount].defPsSc, "%f", &PsSc);

示例:http://ideone.com/BaPmDj

#include <stdio.h>

int main(void) {
    char * str = "1.45";

    float flt;

    sscanf(str, "%f", &flt);

    printf("value = %f\n", flt);

    return 0;
}