ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C/C++之取整函数

2021-02-11 17:01:47  阅读:391  来源: 互联网

标签:lf 四舍五入 函数 int double C++ 取整 round


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;
} 

运行结果截图

在这里插入图片描述

标签:lf,四舍五入,函数,int,double,C++,取整,round
来源: https://blog.csdn.net/wwh1st/article/details/113790906

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有