如何用c语言将一个实数内部精度四舍五入到小数点后第二位

2024-11-06 20:31:20
推荐回答(3个)
回答(1):

#include 
int p10(int m);//求10的次方
double rounding(double n,int w);//小数四舍五入,参数w:精确到第几数
int main()
{
    int w;
    double n;
    while(1)
    {
        printf("请输入一个实数:");
        scanf("%lf",&n);
        printf("请输入要精确到小数点后几位:");
        scanf("%d",&w);
        n=rounding(n,w);
        printf("四舍五入后的数值为:%.*lf\n\n",w,n);
    }
    return 0;
}
double rounding(double n,int w)//小数四舍五入,参数w:精确到第几数
{
    int z,p=p10(w+1);
    double d;
    d=n-(int)n;
    d+=1.0/p10(11);//避免精度丢失
    d*=p;
    d=(int)d;
    z=(int)d%10;
    if(z>=5)
        d=((d+10)-z)/p+(int)n;
    else
        d=(d-z)/p+(int)n;
    return d;
}
int p10(int m)//求10的次方
{
    int i,sum=1;
    for(i=0;i        sum*=10;
    return sum;
}

回答(2):

利用取整截断小数部分的特性来实现:

float x=3.1415,y; int a;
y=x*100+0.5; a=y; y=a; y/=100; //至此,y中存储的数为x的保留2位小数的结果

回答(3):

正数 x 四舍五入的技巧:
x --> (int)(x+0.5)
当 x=n+r, 0<=r<1,
若 0<=r<0.5, 则r+0.5<1, (int)(x+0.5)=(int)(n+r+0.5)=n
若 0.5<=r<1, 则1<= r+0.5, (int)(x+0.5)=(int)(n+r+0.5)=n+1