2

当我尝试将 char 转换为 float 时,我正在使用 atof 并且它没有返回整个值,&如何纠正这个问题 还有其他方法可以做到这一点吗?

如果我给出这个长度(700.898)的值,它会返回正确的值。如果我给出的数字超过 3 个,那么只会遇到问题。如果我问错了什么,对不起。

float flt = 71237.898;
char myfloat[50];
sprintf (myfloat, "%f", flt);  //myfloat = 71 237.8984380
float f = atof(myfloat); //f = 71.0000

删除空格:

int myfllen = strlen(myfloat);
    for(int b=0;b<strlen(myfloat);b++)
        {
        if(myfloat[b] == ' ')
            {
            int c = b;
            while(c<=myfllen)
                {
                myfloat[c] = myfloat[c+1]; 
                c++;
                }
            }
        }
4

2 回答 2

4

正如您在评论中发布的那样,您真的在71237之后有那个空间吗?sprintf如果是这样,那么这很可能是atof导致停止解析字符串 after 的原因71。您实际上可以切换到strtod(总是比 更好的主意atof)并要求它为您提供导致它停止解析的字符位置。

显然,您的语言环境设置sprintf使用空间作为数字组分隔符。同时atof不支持区域设置。语言规范不要求atof( strtod) 识别区域设置以外的"C"区域设置的特定于区域设置的数字格式。

setlocale(LC_ALL, "C")以前做sprintf,它应该有望摆脱那个空间。或者手动清理这些空间。

于 2012-08-10T04:57:08.447 回答
0

我已经使用了你的代码并制作了小程序

#include<stdio.h>
#include<stdlib.h>
int main()
{
double flt = 71237.898;
char myfloat[50];
sprintf (myfloat, "%f", flt);  
double f = atof(myfloat); 
printf("answer is %f",f);
return 0;
}

这给出了输出

answer is 71237.898000

http://codepad.org/GMWScwqK

我认为你会因为使用 float 作为返回值而遇到问题....但实际上 atof 返回 double 值...

于 2012-08-10T05:06:58.777 回答