日常编程中,你是否也遇到过取值问题时面对这样的函数floor、ceil、round、trunc,今天来介绍一下这些函数。

floor函数

floor函数,又称为下取整函数,在数学中如下表示

其意义是最大整数小于或等于$x$。我们拿numpy来尝试一下:

1
2
3
4
5
6
7
8
9
10
11
12
>>> import numpy as np
>>> np.floor(1.2)
1.0
>>> np.floor(1.8)
1.0
>>> np.floor(-3.2)
-4.0
>>> np.floor(-3.8)
-4.0
>>> np.floor(0)
0.0
>>>

ceil函数

ceil函数,又称为上取整函数,在数学中如下表示

其意义是最小整数大于或等于$x$。我们拿numpy来尝试一下:

1
2
3
4
5
6
7
8
9
>>> import numpy as np
>>> np.ceil(1.2)
2.0
>>> np.ceil(1.8)
2.0
>>> np.ceil(-3.2)
-3.0
>>> np.ceil(-3.8)
-3.0

根据ceil函数和floor函数的特点,我们不难得出

类似地,

round函数

round函数就是我们日常中说的四舍五入,或者说返回离其最近的整数。这个函数在tensorflow也是类似的定义,

1
2
3
4
5
6
7
8
9
10
>>> print(tf.math.round.__doc__)
Rounds the values of a tensor to the nearest integer, element-wise.

Rounds half to even. Also known as bankers rounding. If you want to round
according to the current system rounding mode use tf::cint.
For example:

python
x = tf.constant([0.9, 2.5, 2.3, 1.5, -4.5])
tf.round(x) # [ 1.0, 2.0, 2.0, 2.0, -4.0 ]
1
2
3
4
5
6
Args:
x: A `Tensor` of type `float16`, `float32`, `float64`, `int32`, or `int64`.
name: A name for the operation (optional).

Returns:
A `Tensor` of same shape and type as `x`.

numpy演示

1
2
3
4
5
6
7
8
>>> np.round(1.4)
1.0
>>> np.round(1.5)
2.0
>>> np.round(-1.4)
-1.0
>>> np.round(-1.5)
-2.0

trunc函数

trunc函数可以用ceil、floor函数定义,看起来有点复杂,

默认情况下n取0,即截断小数部分。用numpy来演示可以直观地理解,

1
2
3
4
5
6
7
8
9
10
>>> np.trunc(1.1)
1.0
>>> np.trunc(1.5)
1.0
>>> np.trunc(1.51)
1.0
>>> np.trunc(-1.4)
-1.0
>>> np.trunc(-1.51)
-1.0

总结

上取整函数(ceil)和下取整函数(floor)的名称其实来自英文的ceiling(天花板)和floor(地板),因此很好记忆。

转载请包括本文地址:https://allenwind.github.io/blog/12387
更多文章请参考:https://allenwind.github.io/blog/archives/