方法一:借助floor函数
对于一个double a = 1.234567;
如果我只取小数点后3位,那么我可以这样做:
a = floor(a*1000)/1000;
floor函数的作用是返回一个小于传入参数的最大整数,所以对于正数来说,就是抹去小数点后的部分。
它具有多种形式:
double floor ( double x );
float floor ( float x );
long double floor ( long double x );
注意一:如果是负数,则需要在floor之后+1。
a = (floor(a*1000)+1)/1000;
注意二:如果是负数,并且浮点数本来位数也不够,那么下面就会算错。
double a = -1.2;
a = (floor(a*1000)+1)/1000;
方法二:借助sprintf和sscanf
借助一个辅助的字符串空间。
int main()
{
double d = 1.2345;
double r;
char str[8]; //辅助空间
sprintf( str, "%0.2f", d); //截取后转化为字符串类型
sscanf( str, "%lf", &r);//由字符串类型恢复为double类型
cout<<str<<endl;
cout<<r;
return 0;
}