C/C++之取整函数
后面的double x放的是你的浮点型参数。
取整函数向上取整和向下取整有现成的函数。不过它们的缺点是正数和负数用到的函数是相反的容易混淆。
函数名 | 函数说明------>右边第一行都是测试数据,右边下面都是返回值 | 1.1 | 1.5 | -1.1 | -1.5 |
---|---|---|---|---|---|
floor() | 返回不大于自变量的最大整数 | 1 | 1 | -2 | -2 |
ceil() | 返回不小于自变量的最大整数 | 2 | 2 | -1 | -1 |
round() | 返回四舍五入到最邻近的整数 | 1 | 2 | -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;
}