解决精度问题

解决精度问题

以一道题为例

求以下三数的和,保留2位小数 1~a之和 1~b的平方和 1~c的倒数和

样例输入:
100 50 10

样例输出:
47977.93

注意:

  1. 结果有小数部分
  2. 小数要保留两位
  3. 要解决相应的精度问题

解决办法

1.小数
使用浮点型数据,哪个数有小数,就要定义成浮点型。
2.小数点后的位数
%.2f 即可解决
3.精度问题
注意数据运算的格式,有小数点的要加上小数点

错误的代码

#include<stdio.h>
int main()
{
	int a,b,c,i;
	double s=0.00;
	scanf("%d%d%d",&a,&b,&c);
	for (i=1;i<=a;i++)
		s += i;
	for (i=1;i<=b;i++)
		s += i*i;
	for (i=1;i<=c;i++)
		s += 1/i;//错误之处
	printf("%.2lf",s); 
}

改正后的代码

#include<stdio.h>
int main()
{
	int a,b,c,i;
	double s=0.00;
	scanf("%d%d%d",&a,&b,&c);
	for (i=1;i<=a;i++)
		s += i;
	for (i=1;i<=b;i++)
		s += i*i;
	for (i=1;i<=c;i++)
		s += 1.0 /i;//改正之后的
	printf("%.2lf",s); 
}

不难看出,仅仅把分子改成小数类型,就是正确结果。
其实,除法运算往往能够出现小数,因此要保证分子是小数,结果才能保留小数部分。

思考

在以后的C语言编程中,要时刻注意:

1.结果有小数,一定要注意一下
  • 变量是否定义成浮点型或double型
  • 除法运算的分子或分母是否加了小数点(一般针对固定的常数)
2.变量的初始化
  • 出现累加或者累乘时,和的变量 或 积的变量要进行初始化,如果没有,结果往往不尽人意
  • 大项目里出小错,往往很难发现。我就是花费了好长时间才找出来。因此以后要养成好的习惯,不要因小失大。

总结:

  1. 在除数和被除数都是int型时,除法(/)默认会进行取整操作,将小数部分截掉。
  2. 如果要保留小数,需要让除数或者被除数两者任一个有小数位,才会使结果出现小数。
  3. double 和 int 运算结果自动为double型,float 和 int 运算结果为float。也就是占字节数小的数据类型会自动转化为占字节大的数据类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行码棋

码字好辛苦,总结好吃力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值