C语言的小数四舍五入取整(及)

对于C语言有着严格的数据类型要求,对于小数取整数,我们有着以下几种改变方式。
一.直接抹去小数
1.编译器自动转化类型

# include <stdio.h>

int main(void)
{
	int a;
	a = 2.7;
	
	printf("%d",a); //a=2;
	
	return 0;
}
2.强制类型转换
# include <stdio.h>

int main(void)
{
	
	printf("%d",(int)3.75); //a=3;
	
	return 0;
}

二.
从上边可以看出,对于编译器自动转化及强制类型转换,将会把小数的小数位去除,那么当我们需要四舍五入时,我们可以这样做:

# include <stdio.h>

int main(void)
{
	int y;
	double a;
	a = 3.73;
	y = (int)(a+0.5); 
	
	//or
	//a = (int)(3.73);
	
	printf("%d",y); //a=4;
	
	return 0;
}

三.利用函数取整
1.ceil函数
ceil(x)返回的大于等于x的最小整数
函数声明:
#include <math.h>
double ceil( double num );

#include <stdio.h>
#include <math.h>

int main(void)
{
         int a,b,c,d;  
         a = ceil(1.7);  //a=2
         b = ceil(2.3);  //b=3
         c = ceil(-2.3); //c=-2
         d = ceil(8.0);  //d=8
         printf("a = %d,b = %d,c = %d,d = %d",a,b,c,d);
}

2.floor函数
作用:floor 取出小于等于x的最大整数
函数声明:
#include <math.h>
double floor( double arg );

#include <stdio.h>
#include <math.h>
main()
{
         int a,b,c,d;
         a = floor(1.7);  //a=1
         b = floor(2.3);  //b=2
         c = floor(-2.3); //c=-3
         d = floor(8.0);  //d=8
         printf("a = %d,b = %d,c = %d,d = %d",a,b,c,d);
}

注意:ceil函数和floor函数效果不同
总结:
对于以上函数我们进行一下分类:
1.真正能起到四舍五入作用的还是要在小数原样同时加上0.5后进行强制类型转换;
2.对于floor函数其作用即等同于数学里的取整函数【x】;即向左取整,注意ceil函数(向右取整)区分;
3对于编译器的主动数据类型转换即直接类型转换其实质就是去除小数输出整数部分。

——————————————————————————
举个例子:来源:(pta)
**题目:**按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
输出样式:
输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。
输出格式:
在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。
样例:
输入1:
65 60
输出1:
OK
输入2:
110 100
输出2:
Exceed 10%. Ticket 200
输入3:
200 120
输出3:
Exceed 67%. License Revoked

# include <stdio.h>

int main(void)
{
	int x;              //x为百分比数字 
	double y;
	int speed,limit;    //speed速度,limit限速; 
	scanf("%d%d",&speed,&limit);
	
	y = (speed-limit)*100.0/limit;
	x = (int)(y+0.5);
	if(x<10)
		printf("OK");
	else if(x>=10&&x<50)
		printf("Exceed %d%%. Ticket 200",x);
	else
		printf("Exceed %d%%. License Revoked",x);
	//在此还需注意格式输出符%+%将会在终端输出% 
	 
	return 0;
} 

—————————————————————————
end

  • 36
    点赞
  • 169
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值