概述
需求:如上图为已经安装内存为8589934592Byte,字符串格式为string,需将其转换为GB显示给用户,格式依然为string;
问题:
//前部代码省略,通过命令行获取到str,这里直接将结果赋值给str
string str = "8589934592";
int n = atoi(str.c_str());
n=n/(1024*1024*1024);
char p[100]={0};
itoa(n,p,10);
str=p;
cout<<p<<endl;//输出结果为1,为什么?
分析:
通过单步调试,发现int越界,atoi处已经越界,int范围“-2147483648~2147483647”(32位),可看出最大2开头十位数,然而实际已经8开头十位数了,然而编译器并没有报错,直接给最大数,运算后为1
解决办法:
1、变量定义成float类型;
2、string转int用sscanf;
3、int转string用sprintf;
TIP:1、int超过十位数建议预判越界问题;
2、sprintf和sscanf在C++功能很强大,在某些情况下远远超过atoi等这类。
最后
以上就是儒雅墨镜为你收集整理的关于string转int、float、double常用方法的全部内容,希望文章能够帮你解决关于string转int、float、double常用方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复