如何将字符串转换为数字
如下所示:
1,“123”——>123;
2,“123.555”——>123.555;
如何用一个函数同时实现上面的两种情况?
我知道atoi只能完成第1种情况,atof只能完成第2种情况,
[解决办法]
遍历字符串,然后if 判断
[解决办法]
float value;
const char* str = "123.55";
sscanf(str,"%f",&value);
说实话我觉得你不必纠结value最后到底是不是整数,如果你预期可能会溢出那么就用double。最后是不是整数只是取决于你要怎么使用它而已。反正信息是没丢失的。
[解决办法]
先用if判断再用函数
[解决办法]
main()
{
char *a="12345.111111";
double ad=0.0;
int ai=0;
int i;
int j=0;
for(i=0;i<strlen(a);i++)
{
if(a[i]=='.')
{
printf("%f\n",atof(a));
j++;
break;
}
}
if(j==0)
{
printf("%d\n",atoi(a));
}
}
char *a="你自己写个数" ,然后装进去,编译,运行,就可以看到结果。
[解决办法]
果断sscanf
[解决办法]
int i = type_convert<int>("123");
double j = type_convert<double>("123.555");
template<class Out_Type, class In_Type>
Out_Type type_convert(const In_Type& T)
{
stringstream ss;
ss<<T;
Out_Type result;
ss>>result;
return result;
}
[解决办法]
++这个方法也不错,
不过需要首先判断该字符串表示的是整数还是浮点数。
[解决办法]
人家要求的是从字符串转成数字,一看回帖一大半都说的是从数字转成字符串,哈哈,你们这帮人啊,眼睛让驴给踢啦。
两种情况都用 atof 难道会有什么问题吗?
[解决办法]
char s1[]="123";
char s2[]="123.555";
double d1,d2;
sscanf(s1,"%lf",&d1);
sscanf(s2,"%lf",&d2);
printf("%lg\n%lg\n",d1,d2);
[解决办法]
楼主。。。。
你把这段代码复制运行了再说吧。。。。
main()
{
char *a="12345.111111";
double ad=0.0;
int ai=0;
int i;
int j=0;
for(i=0;i<strlen(a);i++)
{
if(a[i]=='.')
{
printf("%f\n",atof(a));
j++;
break;
}
}
if(j==0)
{
printf("%d\n",atoi(a));
}
}
[解决办法]
其实字符串转换成数字,不过是ASCII码 --> 数字的转换。
如果楼主有兴趣,可以自己实现一个,也很简单。
2楼和17楼的方法也是推荐使用的。
[解决办法]
楼上你就把我排除在外了???
不知道是我心态有问题,还是咋的。。。
楼主不懂也就罢了,虚心学习嘛倒也是,但我老觉得挑三拣四不结贴很让人烦。
还有那些不懂装懂的,比如楼上这位,混淆视听,自己啥也不懂扯张嘴乱糊弄,哎。。
可惜了CSDN这么好的平台,强烈要求增加版面巡视人员。
[解决办法]
此贴开始人生攻击了。。
“123”的atof的结果应该是123的浮点数形式。
请问LZ, 你需要一个函数,统一处理字符串数字?那用什么类型的返回值呢?
用
struct
{
int flag,
union
{
int i,
double f,
}
};
么?
否则你的问题就是无意义的
[解决办法]
不需要对应abc是什么意思? 难道是只有遇到”0xFFFFFFFF"才转化?
如果是0xffabcabc就不转换了对吗?