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)=1
,round(-0.5)=-1
。 - 注意在 c99 里没有 round 只能接收 double 为参数,接收 float 为参数的函数为 roundf。c++里都可以。
- 除了第一个,后面三个函数均返回 float (或 double )类型,这是因为原数据的表达范围超过 int 的返回类型。
Q. E. D.