24,854
社区成员
发帖
与我相关
我的任务
分享
//Round(1.234,2) = 1.23
//Round(1.234,0) = 1.0
//Round(123.4,-1) = 120.0
double Round(double dVal, short iPlaces) {
double dRetval;
double dMod = 0.0000001;
if (dVal<0.0) dMod=-0.0000001;
dRetval=dVal;
dRetval+=(5.0/pow(10.0,iPlaces+1.0));
dRetval*=pow(10.0,iPlaces);
dRetval=floor(dRetval+dMod);
dRetval/=pow(10.0,iPlaces);
return(dRetval);
}
double round(double dVal, short iPlaces) //iPlaces>=0
{
unsigned char s[20];
double dRetval;
sprintf(s,"%.*lf",iPlaces,dVal);
sscanf(s,"%lf",&dRetval);
return (dRetval);
}
double round(double d, unsigned p)
{
if(d==0)
return 0;
double n=1;
for(;p>0;p--)
n*=10;
if(d>0.0)
if(d-(__int64)(d*n)/n>=5)
return (__int64)(d*n+0.5) / n;
else
return (__int64)(d*n+0.5000001) / n;
else
if(d-(__int64)(d*n)/n>=5)
return (__int64)(d*n-0.5) / n;
else
return (__int64)(d*n-0.5000001) / n;
}
参数d为原浮点数,p为精确到小数点后的位数