Python中的除法运算符?

通常,表达式的数据类型取决于参数的类型。此规则适用于大多数运算符:就像我们将两个整数相加时,结果应为整数。但是,如果进行除法,则效果不佳,因为存在两个不同的期望。有时,我们期望除法运算会生成精确的浮点数,而其他时候,我们需要四舍五入的整数结果。

通常,divide(/)的python定义仅取决于参数。例如在python 2.7中,除数20/7为2,因为两个参数都为整数。但是,20./7将生成2.857142857142857作为输出,因为参数是浮点数。

上面的'/'定义通常会给应用程序带来问题,而这些应用程序使用的是作者未曾期望的数据类型。

考虑一个简单的程序,将温度从摄氏温度转换为华氏温度会根据输入产生两种不同的结果。如果一个用户提供整数参数(18)和另一浮点参数(18.0),则即使所有输入的数值均相等,答案也完全不同。

#Conversion of celcius to Fahrendheit in python 2.6
>>> print 18*9/5 + 32
64
>>> print 18.0*9/5 + 32
64.4
>>> 18 == 18.0
True

从上面我们可以看到,当我们通过18.0时,我们得到正确的输出,而当我们通过18时,我们得到不正确的输出。这是因为在python 2.x中,如果所有参数都是整数,则“ /”运算符将作为下限。但是,如果参数之一是浮点值,则“ /”运算符将返回一个浮点值。

显式转换函数(例如float(x))可以帮助防止这种情况。然而,这个想法是为了让python是简单而稀疏的语言,而不会进行密集的转换以覆盖罕见的意外数据类型的情况。从Python 2.2版本开始,添加了新的除法运算符以阐明期望的内容。普通的/运算符将来会返回浮点结果。一个特殊的除法运算符//将返回四舍五入的结果。

>>> # Python 2.7 program to demonstrate the use of "//" for both integers and floating point number
>>> print 9//2
4
>>> print -9//2
-5
>>> print 9.0//2
4.0
>>> print -9.0//2
-5.0

Python 3.x中的除法运算

在python 3.x中,删除了上述缺陷,并且'/'运算符对整数和浮点参数都进行了浮点除法。

>>> #Conversion of celcius to Fahrendheit in python 3.x
>>> #Passing 18 (integer)
>>> print (18*9/5 + 32)
64.4
>>> #Passing 18.0(float)
>>> print(18.0*9/5 + 32)
64.4

当我们传递+ ve或–ve参数时,也没有区别。

>>> print(9/2)
4.5
>>> print(-9/2)
-4.5
>>> print(9.0/2)
4.5
>>> print(-9.0/2)
-4.5