当前位置: 首页 > news >正文

【向上取整/向下取整】C语言向上或向下取整 函数

C语言有以下几种取整方法:
1、直接赋值给整数变量。如:
int i = 2.5; 或 i = (int) 2.5;
这种方法采用的是舍去小数部分


2、C/C++中的整数除法运算符“/”本身就有取整功能(int / int),但是整数除法对负数的取整结果和使用的C编译器有关。3、使用floor函数。floor(x)返回的是小于或等于x的最大整数。如:floor(2.5) = 2
floor(-2.5) = -3
4、使用ceil函数。ceil(x)返回的是大于x的最小整数。如:ceil(2.5) = 3
ceil(-2.5) = -2
floor()是向负无穷大舍入,floor(-2.5) = -3;ceil()是向正无穷大舍入,ceil(-2.5) = -2。

5、round(x)返回x的四舍五入整数值。

但是在C里面round、ceil和floor()函数是返回double型,

先在网上发现一个简单的向上取整方法;

这里我们用<>表示向上取整,[]表示向下取整,那么怎么来表示这个值呢?

我们可以证明:

=[(N-1)/M]+1    (0

不失一般性,我们设N=Mk+r(0<=r

1)当r>0时,

左边:=<(Mk+r)/M>==k+=k+1

右边:[(N-1)/M]+1=[(Mk+r-1)/M]+1=[k+(r-1)/M]+1=k+1+[(r-1)/M]=k+1

2)当r=0

左边:=k

右边:[(N-1)/M]+1=[(Mk-1)/M]+1=[(M(k-1)+M-1)/M]+1=[k-1+(M-1)/M]+1=k+[(M-1)/M]=k

命题得证。

有了这个公式,我们在代码里可以这样计算:

int nn=(N-1)/M +1

.

因为'/'是往下取整的。

用法:

?
1
2
3
4
5
6
7
#include
double ceil ( double x);
double floor ( double x);
double round( double x);

ceil(x)返回不小于x的最小整数值(然后转换为double型)。

floor(x)返回不大于x的最大整数值。

round(x)返回x的四舍五入整数值。

给个例子test.c:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include
#include
int main( int argc, const char *argv[])
{
float num = 1.4999;
printf ( "ceil(%f) is %f\n" , num, ceil (num));
printf ( "floor(%f) is %f\n" , num, floor (num));
printf ( "round(%f) is %f\n" , num, round(num));
return 0;
}
 编译:$cc test.c -lm

执行:$./a.out

ceil(1.499900) is 2.000000

floor(1.499900) is 1.000000

round(1.499900) is 1.000000


 
 

相关文章:

  • 【IAR启动代码】IAR MSP430 启动代码的修改
  • 【C库函数】C库函数
  • 【结构体-参数】结构体和结构体指针作参数
  • 【JAVA与C\C++】JAVA与C\C++ 的不同|JDK、JRE、JVM的区别
  • 【VC++学习日志】VCC++学习日志
  • 【JTAG、SBW、BSL】MSP430的BSL
  • 【stack pointer 】The stack pointer for stack is outside the stack range
  • 【浮点数转16进制】小数(单精度浮点数)转16进制字节
  • 【VISIO绘图】VISIO绘图 学习笔记
  • 【FLASH 操作】FLASH 读写等操作 学习
  • 【ARM9】ARM 2440 学习笔记
  • 【学习经验】学习经验总结
  • 【C到C++】C到C++ 学习笔记 【概念】
  • 【IAR外部编辑器】IAR 使用外部编辑器(VS2005/2008/2010等)的设置
  • 【捕获比较模式】msp430定时器比较捕获理解
  • [NodeJS] 关于Buffer
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Vue ES6 Jade Scss Webpack Gulp
  • vue-cli3搭建项目
  • 笨办法学C 练习34:动态数组
  • 聊聊directory traversal attack
  • 日剧·日综资源集合(建议收藏)
  • 硬币翻转问题,区间操作
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #控制台大学课堂点名问题_课堂随机点名
  • $L^p$ 调和函数恒为零
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (二)JAVA使用POI操作excel
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (三)elasticsearch 源码之启动流程分析
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (数据结构)顺序表的定义
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .net和php怎么连接,php和apache之间如何连接
  • :中兴通讯为何成功
  • [20150321]索引空块的问题.txt
  • [Android 13]Input系列--获取触摸窗口
  • [Angular 基础] - 指令(directives)
  • [ASP]青辰网络考试管理系统NES X3.5
  • [BetterExplained]书写是为了更好的思考(转载)
  • [BZOJ 3680]吊打XXX(模拟退火)
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
  • [BZOJ2850]巧克力王国
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • [C++打怪升级]--学习总目录
  • [iOS]让Xcode 4.2生成的app支持老的iOS设备(armv6)