保留小数||有效数字问题(C语言)

保留小数问题

   在C语言中我们可以直接利用printf()的特质进行小数的保留,首先目标值应当为一个浮点数类型, 以double类型为例  "% .(这里有个点)n(指的是要保留的位数)lf"

printf("%.1lf\n",a);//指的是保留一位小数
printf("%.2lf\n",a);//指的是保留两位小数

  保留小数所使用的printf函数还是比较复杂(bushi),在sacnf函数中,还会存在读取宽度问题

int a = 123;
printf("%6d",a);

  此时的printf就需要读取到6位a仅有三位剩余的三位就由空格补齐,这时就出现了问题:空格补在哪里,上例中空格就直接补在了右边(默认右对齐)。左对齐则需要“-”加在数字n的左边如下:

printf("%-6d",a);

此时变为左对齐

保留有效数字问题

同样以double类型为例,"% . n (指的是要保留的位数)g(保留有效数字的符号)"

printf("%.1g\n",a);//指的是保留一位有效数字
printf("%.2g\n",a);//指的是保留两位有效数字


在一些问题中可能会遇见一些麻烦,比如我刚刚遇见的。

e31f79ef21eb495698a25adfe6196dd0.png

我给出的代码是

#include<stdio.h>
int main()
{
    int n=0,k=0,count1=0,count2=0,,sum1=0,sum2=0;
    double A=0,B=0;
    scanf("%d %d",&n,&k);
    for(int i=1;i<=n;i++)
    {
        if(i%k==0)
        {
            count1++;
            sum1+=i;
        }
        else
        {
            count2++;
            sum2+=i;
        }
    }
    A=sum1/count1;
    B=sum2/count2;
    printf("%.1lf %.1lf",A,B);
    return 0;
}

但是得不到正确的答案

其原因在于整数除法运算结果先去尾再转换为浮点。

将sum也定义为double类型

正确答案是

#include<stdio.h>
int main()
{
    int n=0,k=0,count1=0,count2=0;
    double A=0,B=0,sum1=0,sum2=0;
    scanf("%d %d",&n,&k);
    for(int i=1;i<=n;i++)
    {
        if(i%k==0)
        {
            count1++;
            sum1+=i;
        }
        else
        {
            count2++;
            sum2+=i;
        }
    }
    A=sum1/count1;
    B=sum2/count2;
    printf("%.1lf %.1lf",A,B);
    return 0;
}

总结:保留小数的除法计算应将除数,被除数,结果均定义为double类型,因为整形的除法运算先去尾再转化为浮点型

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值