做 udacity 項(xiàng)目的時(shí)候發(fā)現(xiàn) python 的除法好像比其他數(shù)學(xué)運(yùn)算復(fù)雜一點(diǎn)。整理了下幾種可能的情況怠苔。
1. 如果除數(shù)和被除數(shù)都是整數(shù)同廉,無論數(shù)學(xué)結(jié)果如何,得到的就是整數(shù)
>>> x = 15/30 #math: 0.5
>>> print x
0
>>> x = 3/5 # math 0.6
>>> print x
0
數(shù)學(xué)上答案明明應(yīng)該是是0.5,出來的結(jié)果卻是0迫肖。試了幾次發(fā)現(xiàn)锅劝,python 2.7 里,如果分母和分子都是整數(shù)蟆湖,得到的結(jié)果就是整數(shù); 而且得到的整數(shù)不是四舍五入后的結(jié)果故爵,而是無論小數(shù)點(diǎn)后的數(shù)值如何,直接抹去帐姻。(強(qiáng)調(diào)python 2.7是因?yàn)閜ython3 這部分有所不同稠集,下面會(huì)提到。)
2. 只要除數(shù)和被除數(shù)中有一個(gè)是浮點(diǎn)數(shù)饥瓷,無論數(shù)學(xué)結(jié)果如何剥纷,得到的就是浮點(diǎn)數(shù)
>>> x = 15./30
>>> print x
0.5
>>> y = 30./30
>>> print y
1.0
3. from __future__ import division
, 區(qū)分 "/" 和"http://"
/ : 不管除數(shù)和被除數(shù)種是否有浮點(diǎn)數(shù)呢铆,得到的結(jié)果都是浮點(diǎn)數(shù)晦鞋;
//: 不管除數(shù)和被除數(shù)種是否有浮點(diǎn)數(shù),得到的結(jié)果都是整數(shù)(小數(shù)點(diǎn)之后的位數(shù)直接抹去)棺克;
from __future__ import division
x = ((x-min(arr))/ (max(arr)- min(arr)))
print x
# 不管 min(arr) 是整數(shù)還是浮點(diǎn)數(shù)悠垛,得到的結(jié)果都是浮點(diǎn)數(shù)
x = ((x-min(arr))// (max(arr)- min(arr)))
print x
# 不管 min(arr) 是整數(shù)還是浮點(diǎn)數(shù),得到的結(jié)果都是整數(shù)(如果有小數(shù)點(diǎn)的話小數(shù)點(diǎn)之后的
還需要注意的是娜谊,在pyhton3中确买,"/"表示的就是float除,不需要再引入模塊纱皆,就算分子分母都是int湾趾,返回的也將是浮點(diǎn)數(shù) ---python中的float除法和整除法
4. 對(duì)得到的浮點(diǎn)數(shù)四舍五入: round()
雖然得到的結(jié)果可能是浮點(diǎn)數(shù),但如果位數(shù)太多也會(huì)造成麻煩派草,這個(gè)時(shí)候就需要祭出 round() 四舍五入了搀缠。
round( x [, n] )
x 是輸入值,n 是返回的小數(shù)點(diǎn)位數(shù)近迁。
round(80.23456, 2) : 80.23
round(100.000056, 3) : 100.0
round(-100.000056, 3) : -100.0
參考:
python中的float除法和整除法
跟老齊學(xué)Python之啰嗦的除法
Python round() 函數(shù)