C++字符和数值转换,double数值比较,小数精度处理,满满实战干货,闭眼入
数值类型 和string互转
1.int转string的方式
c++11标准增加了全局函数std::to_string:
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
采用sstream中定义的字符串流对象来实现。
ostringstream os; //构造一个输出字符串流,流内容为空
int i = 12;
os << i; //向输出字符串流中输出int整数i的内容
cout << os.str() << endl; //利用字符串流的str函数获取流中的内容
字符串流对象的str函数对于istringstream和ostringstream都适用,都可以获取流中的内容。
2.string转int
可以使用std::stoi/stol/stoll等等函数
数值比较
浮点数比较:std::abs(a - b)可用于浮点数加减
#include <iostream>
#include <algorithm>
int main()
{
double a = 1.1; //1.1000000000000001
double b = 1.1 + 1e-16; //1.1000000000000001,精度损失
bool ret = std::abs(a - b) < std::abs(std::min(a, b)) * std::numeric_limits<double>::epsilon(); //true
}
小数精度处理
在实际应用中,我们经常需要对小数进行四舍五入然后取其精度。C++中,可以使用round函数来实现小数的四舍五入。当然也可以使用字符处理函数如CString::Format(),sprintf()等处理函数,但都涉及到double类型转字符后再转回double的过程,在大数据处理时会异常耗时,而round()函数可以使百万数据的处理时间在毫秒级内。
int main()
{
double a = 3.1415926;
double b = round(a * 100) / 100;
cout << b << endl;
return 0;
}
输出结果为:3.14
在上述代码中,我们将浮点数a乘以100,然后使用round函数进行四舍五入,最后再除以100,就可以得到保留两位小数的结果。需要注意的是,在使用round函数时,需要包含cmath头文件。