做 udacity 项目的时候发现 python 的除法好像比其他数学运算复杂一点。整理了下几种可能的情况。
1. 如果除数和被除数都是整数,无论数学结果如何,得到的就是整数
>>> x = 15/30 #math: 0.5
>>> print x
0
>>> x = 3/5 # math 0.6
>>> print x
0
数学上答案明明应该是是0.5,出来的结果却是0。试了几次发现,python 2.7 里,如果分母和分子都是整数,得到的结果就是整数; 而且得到的整数不是四舍五入后的结果,而是无论小数点后的数值如何,直接抹去。(强调python 2.7是因为python3 这部分有所不同,下面会提到。)
2. 只要除数和被除数中有一个是浮点数,无论数学结果如何,得到的就是浮点数
>>> x = 15./30
>>> print x
0.5
>>> y = 30./30
>>> print y
1.0
3. from __future__ import division
, 区分 "/" 和"//"
/ : 不管除数和被除数种是否有浮点数,得到的结果都是浮点数;
//: 不管除数和被除数种是否有浮点数,得到的结果都是整数(小数点之后的位数直接抹去);
from __future__ import division
x = ((x-min(arr))/ (max(arr)- min(arr)))
print x
# 不管 min(arr) 是整数还是浮点数,得到的结果都是浮点数
x = ((x-min(arr))// (max(arr)- min(arr)))
print x
# 不管 min(arr) 是整数还是浮点数,得到的结果都是整数(如果有小数点的话小数点之后的
还需要注意的是,在pyhton3中,"/"表示的就是float除,不需要再引入模块,就算分子分母都是int,返回的也将是浮点数 ---python中的float除法和整除法
4. 对得到的浮点数四舍五入: round()
虽然得到的结果可能是浮点数,但如果位数太多也会造成麻烦,这个时候就需要祭出 round() 四舍五入了。
round( x [, n] )
x 是输入值,n 是返回的小数点位数。
round(80.23456, 2) : 80.23
round(100.000056, 3) : 100.0
round(-100.000056, 3) : -100.0
网友评论