C++取整与取小数

编程经验分享

取整与取小数运算和加减乘除一样应该算是C++中的基础运算,利用C++编程科学计算或者处理数据是会经常用到。
就目前用到的以及查阅资料所见的一些说法,这两种运算主要通过类型转换和专有函数来实现。

1. “/”除法运算取整

基本运算符,“/”有截取整数部分的作用,实际上应该是”/“的多态性导致:”/“根据参与运算的数据类型返回特定的某一种数据类型
(1)”/“两边都是整型时,返回整型数据,即会将运算的结果截取整数部分,即使用浮点型变量接收数据,接收到的也是整型又转换成浮点型的数据

cout << "9/10 " << 9/10 << endl;//结果为0
	double a = 9 / 10;//a=0.0

(2)”/“两边有浮点型时返回浮点型数据,运算时也会对整型强制转换为浮点型。
(注意一点“/”在计算过程中,如果要保留小数位,一定要注意两边的至少有一个是浮点数,否则结果会自动截掉小数位造成数据异常)

cout << "9.0/10 " << 9.0/10 << endl;//结果为0.9
2.类型转换取整

通过将浮点型数据强制转换为整型,得到浮点型数据的整数部分,小数部分被舍去

int a = (int)9.8;//结果a=9
	int b=int(-9.8)//b=-9
3.专有函数

在matlab中有很多取整函数可用,但在C++并不全都有对应,有些函数像fix()向0取整C++中没有,需要自己编写
(1)matlab中fix()向0取整,正数和负数取整方向相反,正数取小于某数的最大整数,负数取大于某数的最小整数,C++中没有对应函数,但可以通过这种方法实现
(方法并不唯一,见仁见智)

long fix(double a)
	{
		double buf=a;//中间变量
		//将原数取绝对值,利用ceil()向下取整
		buf = abs(buf);
		buf = ceil(buf);
		if(a<0) 
		buf=-buf;
		return buf;
	}

(2)ceil(),返回整型值
向上取整,也即向无穷大取整,天花板函数

ceil(1.1)//返回2
 ceil(-1.1)//返回-1

(3)floor(),返回整型值
向下取整,也称向负无穷取整,地板函数

floor(1.9)//返回1
floor(-1.1)//返回-2

(4)round(),返回整型值
对绝对值四舍五入,取值不受正负号影响

round(1.5)//返回2
round(1.4)//返回1
round(-1.2)//返回-1
round(-1.5)返回-2
4.取小数

c++没有专有的取小数部分函数,但是可以通过原数减去整数部分来取

double a=1.1-floor(1.1)//a=0.1
double b=-1.1-ceil(-1.1)//b=-0.1