2.8.2 浮点数的常见运算

周末了,我去菜场买菜。

我买了一斤肉,20元钱,20是一个整型数,即int类型。

我又换了个摊位买了一把青菜,9.5元,9.5是一个浮点数,float类型。

老板说:“给你一把葱,给10元吧。”老板把浮点数往上取整,做了round up的运算。

我说:“零头就算了,给9元吧。”我把浮点数往下取整了,四舍五也舍,做了floor的运算。

浮点数类型用于表示小数(有限小数)。除了加减乘除之外,浮点数最常见的操作就是各种取整,以及根据指定的精确度来取近似值。

以下是上述场景中几个典型的浮点数,我们可以用type函数来确认它们的类型。


>>> type(3.14)
<class 'float'>

>>> type(1.0)
<class 'float'>

>>> type(20.00)
<class 'float'>

>>> type(-0.009)
<class 'float'>

取浮点数的整数部分,用int函数。


>>> int(3.14)
3
>>> int(5.5)
5
>>> int(-3.9123)
-3

四舍五入到整数位,用round函数。


>>> round(3.14)
3
>>> round(5.5)
6
>>> round(0.1)
0
>>> round(-0.9)
-1

四舍五入到指定的小数点位数,用带参数的round函数。


>>> PI
3.14159265358979
>>> round(PI)
3
>>> round(PI, 2)
3.14
>>> round(PI, 4)
3.1416

请留意round方法以下的特别行为:


>>> round(4.5)
4

round(4.5)的结果是4,看起来round方法的默认行为是向下取整,这样的话,round(5.5)的结果应该是5,我们来验证一下。


>>> round(5.5)
6

这个结果看起来很难理解,round方法的文档里其实对这个设计是有描述的:如果待取整的值正好处于中间位置,结果取偶数值。

比如,5.5与5和6的差都是0.5,正好处于二者中间,在这种情况下,round结果是取5和6二者中的偶数,也就是6;4.5与4和5的差都是0.5,在这种情况下,round结果是取4和5二者中的偶数,也就是4。

上取整用ceil函数:


>>> import math
>>> math.ceil(0.0001)
1
>>> math.ceil(0.99)
1
>>> math.ceil(3.14)
4
>>> math.ceil(-4.1)
-4
>>> math.ceil(-4.9)
-4

下取整用floor函数:


>>> import math
>>> math.floor(-4.1)
-5
>>> math.floor(-4.9)
-5
>>> math.floor(0.0001)
0
>>> math.ceil(0.99)
1
>>> math.ceil(9.0)
9