当我尝试将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++;
}
}
}
答案 0 :(得分:4)
您在71
之后的237
和sprintf
之间是否真的有空格,就像您在评论中发布的那样?如果是这样,那么这很可能是atof
在71
之后停止解析字符串的原因。你实际上可以切换到strtod
(总是比atof
更好的想法)并要求它给你一个导致它停止解析的角色位置。
显然,您的区域设置会使sprintf
将空格用作数字组分隔符。同时atof
不支持区域设置。语言规范不要求atof
(strtod
)识别除"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中返回双倍值......