C/C++之取整函数

C/C++之取整函数

后面的double x放的是你的浮点型参数。

取整函数向上取整和向下取整有现成的函数。不过它们的缺点是正数和负数用到的函数是相反的容易混淆。

函数名函数说明------>右边第一行都是测试数据,右边下面都是返回值1.11.5-1.1-1.5
floor()返回不大于自变量的最大整数11-2-2
ceil()返回不小于自变量的最大整数22-1-1
round()返回四舍五入到最邻近的整数12-1-2

round四舍五入函数则需要自己写。

所以这里我就列出自己写的函数。直接针对向上取整、向下取整、四舍五入的问题正负数通用的函数。

向上取整

double cei(double x)//向上取整 
{
	return (int)( (x>0.0)?x+1:x-1 );
} 
//用到了三目运算符和强制转换。
//解析,return里面的式子是三目运算符。因为强制转整形会自动去掉小数点,所以大于0的数+1,强转整形后小数位自动舍弃。小于0的数同理。

向下取整

如果你要输出为浮点型,整形记得要强转成double型。

(double)( (int)(double x) )
//解析这个就是用到了强制转换整形,舍弃小数位。

四舍五入

自己写一个round函数

double round(double x)//返回浮点型
{
    return (int)( (x>0.0)?x+0.5:x-0.5 );
}
//解析,return里面的式子是三目运算符。因为强制转整形会自动去掉小数点,所以大于0的数+0.5如果小数位小于0.5那么整数位不会进1,大于等于0.5加了0.5后,整数位会进1。小于0的数同理。

测试代码

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;

double round(double x)//四舍五入 
{
	return  (int)( (x>0.0)?x+0.5:x-0.5 );
}

double cei(double x)//向上取整 
{
	return (int)( (x>0.0)?x+1:x-1 );
} 

int main(void)
{
	double temp;//临时函数 
	double a = 1.1;
	//temp = double ceil(a);
	printf("a = %lf\na 的向上取整为%lf\na 的向下取整为%lf\na 的四舍五入为%lf\n\n",a,cei(a),(double)( (int)a),round(a) );
	double b = 1.5;
	printf("b = %lf\nb 的向上取整为%lf\nb 的向下取整为%lf\nb 的四舍五入为%lf\n\n",b,cei(b),(double)( (int)b),round(b) );
	a = -1.1;
	b = -1.5; 
	printf("a = %lf\na 的向上取整为%lf\na 的向下取整为%lf\na 的四舍五入为%lf\n\n",a,cei(a),(double)( (int)a),round(a) );
	printf("b = %lf\nb 的向上取整为%lf\nb 的向下取整为%lf\nb 的四舍五入为%lf\n\n",b,cei(b),(double)( (int)b),round(b) );
	
	return 0;
} 

运行结果截图

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

穗余

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值