例:TruncRealNum()模板函数 对实数进行截断保留n位小数
输入: double d = 3.14159265358979;
float f = 3.141592635
输出: d = TruncRealNum(d,5);
d = 3.14159
f = TruncRealNum(f,4);
f = 3.1416
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
template <typename RealType> //模板支持float,double
RealType TruncRealNum(RealType num, int precision)
{
if (precision < 0)
{
return num;
}
if (0 == precision)
{
return round(num);
}
int anum = static_cast<int>((num + 0.5 * pow(0.1, precision)) * pow(10, precision)); //被舍去的一位四舍五入进位
std::cout<<std::setprecision(precision + 1); //调整输出流的显示精度
return static_cast<RealType>(anum / pow(10, precision));
}
例子: main函数
int main(){
float f = 3141592654;
double d = 3.456343424523547867;
std::cout<<std::setprecision(16)<<endl;
cout<<f<<" "<<d<<endl;
cout << TruncRealNum(f, 0) << endl;
cout << TruncRealNum(f, 1) << endl;
cout << TruncRealNum(f, 4) << endl;
cout<<"---------------------------"<<endl;
cout<<TruncRealNum(d,0)<<endl;
double d4 = TruncRealNum(d,4);
cout<<d4<<endl;
double d8 = TruncRealNum(d,15);
cout<<d8<<endl;
return 0;
}