atof()并没有在symbian中占据全部价值

时间:2012-08-10 04:55:14

标签: c char symbian printf

当我尝试将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++;
                }
            }
        }

2 个答案:

答案 0 :(得分:4)

您在71之后的237sprintf之间是否真的有空格,就像您在评论中发布的那样?如果是这样,那么这很可能是atof71之后停止解析字符串的原因。你实际上可以切换到strtod(总是比atof更好的想法)并要求它给你一个导致它停止解析的角色位置。

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

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

答案 1 :(得分: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中返回双倍值......