C++ 的浮点数取整

作者: , 共 458 字

C++的浮点数转整数有四种方法,直接类型转换、round、floor、ceil。其效果如下表:

x -1.9 -1.5 -1.1 1.1 1.5 1.9
static_cast<int>(x) -1 -1 -1 1 1 1
std::round(x) -2 -2 -1 1 2 2
std::floor(x) -2 -2 -2 1 1 1
std::ceil(x) -1 -1 -1 2 2 2

尤其注意

  • 类型转换并不等价于 round ,也不是 floor ,而是向 0 靠拢。
  • round 函数在 0.5 的位置是远离 0 的(和类型转换相反), round(0.5)=1round(-0.5)=-1
  • 注意在 c99 里没有 round 只能接收 double 为参数,接收 float 为参数的函数为 roundf。c++里都可以。
  • 除了第一个,后面三个函数均返回 float (或 double )类型,这是因为原数据的表达范围超过 int 的返回类型。

Q. E. D.

类似文章:
相似度: 0.164
编程 » C++, 算法
一个短小、高效的 C++函数,用来判断指定日期是星期几:
编程 » 算法, 算法分析
下面这个求\( 1/\sqrt{x}\) 的函数号称比直接调用 sqrt 库函数快 4 倍,来自游戏 Quake III 的源代码。
http://senlinzhan.github.io/2017/12/04/cpp-memory-order/ 写得最浅显易懂。记录一下以备查询。
编程 » C++, 内存检查, Linux
获取程序占用的内存量,是一个诡异的需求。但程序写多了,有时候还真需要,尤其是代码运行出现问题的时候。
编程 » C++, C++11
花括号初始化是C++11引入的一种初始化方法。
一个好用的 C++性能分析工具需满足几个条件:
编程 » C++, 编译错误
在 gcc 中,存在继承关系的模版类,子类无法直接访问父类的成员,即使该成员是protectedpublic
相似度: 0.057
boost是除std外最常用的 C++库,覆盖很多常用操作。目前最新的版本是1.59.0
C++内存检查和性能分析工具 valgrind里介绍了 valgrind 的安装,以及用于效率分析 profiler 工具。valgrind 最本来的功能是内存检查。这篇文章做简单的介绍。
编程 » C++, 编译错误
在 gcc 中,存在继承关系的模版类,子类无法直接访问父类的成员,即使该成员是protectedpublic