64,654
社区成员
发帖
与我相关
我的任务
分享
printf("%.15lg",10.0*9*8*7*6*5*4*3*2);
double round1(double d,unsigned p = 0) //精确到小数点后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;
}
再不然就先把浮点数转成字符串,处理后再转回来,不过效率比上面方法低
double round2(double d,unsigned p = 0)
{
if(d==0)
return 0;
double n=0.01;
for(unsigned tmp=p;tmp>0;tmp--)
n/=10;
if(d>0)
d+=n;
else
d-=n;
//先转成字符串
char chs[10],data[200];
sprintf(chs,"%%.%uf",p);
sprintf(data,chs,d);
//再转成double
return atof(data);
}