其实string与double、int的互转有一些函数可以直接用,例如:
//doule转string
string str1 = to_string(3.14);
//int转string
string str2 = to_string(4);
//string转int
int x= atoi(str2.c_str());
//string转double
double y = stof(str1.c_str());
但是不满足我想顺便四舍五入保留小数位的需求,所以自己写了两个函数。
用模板实现的,可以兼容int 和double的类型,但实际上int不用保留小数位,这个可以再改进一下,main函数内是测试的例子。
#include <iostream>
#include <string>
#include<sstream>
#include <iomanip>
#include <cmath>
using namespace std;
template<typename T>
string ToString(T val)//doule转string
{
stringstream ss;
ss << setiosflags(ios::fixed) << setprecision(2) << val;//保留两位小数
string str = ss.str();
return str;
}
template<typename T>
T ToDouble(string input)//string转double
{
T result;
stringstream ss;
ss << input;
ss >>result;
result = round(result * 100)/ 100;//四舍五入保留两位小数
return result;
}
int main()
{
//测试
string sa = "2.5686";
double a = ToDouble<double>(sa);
cout << a << endl;
double b = 3.256454;
string sb = ToString(b);
cout << sb << endl;
string sc = "4.002";
int c = ToDouble<int>(sc);
cout << c << endl;
int d = 5;
string sd = ToString(d);
cout << sd << endl;
// //doule转string
// string str1 = to_string(3.14);
// //int转string
// string str2 = to_string(4);
// //string转int
// int x= atoi(str2.c_str());
// //string转double
// double y = stof(str1.c_str());
system("pause");
return 0;
}
运行结果: