今天做poj3299(很简单的一道题)遇到了浮点数取整的问题,根据网上的资料整理了一下。
假设输入的数据为
double a = 3.146;
要求保留两位小数。最通常的做法是:
double b = (int)((a *100) + 0.5) /100.0;
这样便能够得到3.15;
但是这样有个问题,当对负数进行四舍五入时,如-3.146,精确到3位进行四舍五入,应该是-3.15,但是使用上述方法得到的是-3.14.因此需要对输入的浮点数进行正负的判断。
double _round(double in)
{
if(in > 0.00)
return ((int)(in * 100) + 0.5)/ 100.0);
else
return ((int)(in * 100) - 0.5)/ 100.0);
}
但还有个问题,浮点数与0比较时不能这样写,所以应将与0比较的代码改为:
if(in > 0.00001)
所以,若要在加上精度的话,比较完整的代码是
double _round(double in,int precision)
{
long