64,682
社区成员
发帖
与我相关
我的任务
分享
double round(double d,unsigned p)
{
if(d==0.0)
return 0.0;
double n=10;
for(;p>0;p--)
n*=10;
if(d>0.0)
return (long)(d*n+5) / 10 / (n/10);
else
return (long)(d*n-5) / 10 / (n/10);
}
double round(double d,unsigned p)
{
//先转成字符串
char s[20];
sprintf(s,"%.*f",p,d);
//再转成double
char*sp=s;
bool neg_flag=false;
double res=0;
int x=0,y=1;
if(sp[0] == '+' || sp[0] == '-')
neg_flag = (*sp++ != '+');
while(isdigit(*sp))
res = res * 10 + (*sp++ - '0');
if(*sp++=='.')
{
while(isdigit(*sp))
{
x = x * 10 + (*sp++ - '0');
y*=10;
}
res+=x*1.0/y;
}
return neg_flag ? -res : res;
}