c语言之根据根据输入确定的整数n使得输出也要精确到小数n位

来源:互联网 发布:淘宝dsr计算器 编辑:程序博客网 时间:2024/06/10 03:55

       之前我一直很纠结这个问题,就是比如说输入三个整数a,b,c,输出a/b的小数形式,c为精确的小数位数。这不能用%.4f这样的东西来表示,这样表示的是4位有效数字。曾经查过用%g好像有这个效果,的是美中不足的是用了%g的话会使得后面的0舍弃,我最初是将a/b得到的小数乘以10的c次方,在取整再除以10的c次方去掉尾部的0,的是这样做会使得如果得到的小数不够的话,比如1.0/2.0要是此时c=3,结果只能得到0.5,与所需要的结果还是有差距的。所以这个有的方法有缺陷。

     有错误地代码:

     #include<stdio.h>

    int main()

    {

    int count = 0;
    while (scanf("%d%d%d",&a,&b,&c) != EOF && (a != 0 || b != 0 || c!=0))
    {
         count++;
         if (b == 0)
         {
              printf("Inf answer\n");
         }
         else
         {
              printf("%g\n", (floor((double(a) / double(b))*double(pow(10, c)))) / pow(10, c));
         }
        
    }

    return 0;

    }

  后来看到printf有个巧妙的用法:

   int a, b, c;
   while (scanf("%d%d%d", &a, &b, &c) != EOF && (a != 0 || b != 0 || c != 0))
   {
        if (b!=0)
             printf("%.*lf\n", c, (double)a / b);//printf("%*.*s\n", m, n, ch);

            //前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n 。

            //这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。
        else
            printf("Error Input\n");
    }

0 0