python3之数字(在实际应用中的数字--除法:传统除法、Floor除法和真除法)
2011-11-14 19:46
369 查看
python3之数字(在实际应用中的数字--除法:传统除法、Floor除法和真除法)
----------
除法在python3.0和python2.6中略有差异,实际上,有3种类型的除法,有两种不同的除法操作符,其中一种操作符在python3.0中变化:
X/Y :
传统除法和真除法。在python2.6或之前的版本中,这个操作符对于整数会省去小数部分,对于浮点数会保持小数部分。在python3.0版本中将会变成真除法(无论任何类型都会保持小数部分)。
X//Y :
Floor除法。在python2.2中新增的操作,在python2.6和python3.0中均能使用。这个操作不考虑操作对象的类型,总会省略掉结果的小数部分,剩下最小的能整除的整数部分。
添加真除法是为了解决最初的传统除法的结果依赖于操作数类型(因此,其结果在python这样的动态类型语言中很难预料)这一现象。由于这一限制,python3.0取消了传统除法:/和//操作符在python3.0中分别实现真除法和Floor除法。
1.在python3.0中,/ 现在总是执行真除法,不管操作数的类型,都会返回包含任何余数的一个浮点结果。// 执行Floor除法,它截除掉余数并且针对整数操作数返回一个整数,如果有任何一个操作数是浮点数类型,则返回一个浮点数。
2.在python2.6中,/ 表示传统除法,如果两个操作数都是整数的话,执行截断的整数除法(好像是Floor除法????);否则,执行浮点除法(保留余数,好像是真除法?)。// 执行Floor除法,并且像在python3.0中一样工作,对于整数执行截断除法,对于浮点数执行浮点除法。
如例,在python3.0中:
支持两个python版本
尽管 / 的行为在python2.6和python3.0中不同,我们仍然能够在自己的代码中支持这两个版本,如果你的程序依赖于截断整数除法,在pyton2.6和python3.0中都使用//。如果你的程序对于整数需要有余数的浮点数结果,使用浮点数,从而确保代码在python2.6中运行的时候/的一个操作数是浮点数:
Floor除法 VS 截断除法
一个细微之处在于://操作符通常叫做截断除法,但是,更准确的说法是floor除法,它把结果向下截断到它的下层,即真正结果之下的最近的整数。并直接效果是向下舍入,并不是严格地截断,并且这对负数也有效。你可以使用python的math模块来自己查看其中的区别:
----------
除法在python3.0和python2.6中略有差异,实际上,有3种类型的除法,有两种不同的除法操作符,其中一种操作符在python3.0中变化:
X/Y :
传统除法和真除法。在python2.6或之前的版本中,这个操作符对于整数会省去小数部分,对于浮点数会保持小数部分。在python3.0版本中将会变成真除法(无论任何类型都会保持小数部分)。
X//Y :
Floor除法。在python2.2中新增的操作,在python2.6和python3.0中均能使用。这个操作不考虑操作对象的类型,总会省略掉结果的小数部分,剩下最小的能整除的整数部分。
添加真除法是为了解决最初的传统除法的结果依赖于操作数类型(因此,其结果在python这样的动态类型语言中很难预料)这一现象。由于这一限制,python3.0取消了传统除法:/和//操作符在python3.0中分别实现真除法和Floor除法。
1.在python3.0中,/ 现在总是执行真除法,不管操作数的类型,都会返回包含任何余数的一个浮点结果。// 执行Floor除法,它截除掉余数并且针对整数操作数返回一个整数,如果有任何一个操作数是浮点数类型,则返回一个浮点数。
2.在python2.6中,/ 表示传统除法,如果两个操作数都是整数的话,执行截断的整数除法(好像是Floor除法????);否则,执行浮点除法(保留余数,好像是真除法?)。// 执行Floor除法,并且像在python3.0中一样工作,对于整数执行截断除法,对于浮点数执行浮点除法。
如例,在python3.0中:
>>>10/4 2.5 >>>10//4 2 >>>10/4.0 2.5 >>>10//4.0 2.0在python2.6中:
>>>10/4 2 >>>10//4 2 >>>10/4.0 2.5 >>>10//4.0 2.0注意,在python3.0中,//的结果的数据类型总是依赖于操作数的类型:如果操作数中有一个是浮点数,结果就是浮点数;否则,结果是一个整数。尽管这可能与python2.x中类型依赖行为类似(正是该因素引发了在python3.0中的变化),但返回值类型的差异比返回值本身的差异要轻微很多。
支持两个python版本
尽管 / 的行为在python2.6和python3.0中不同,我们仍然能够在自己的代码中支持这两个版本,如果你的程序依赖于截断整数除法,在pyton2.6和python3.0中都使用//。如果你的程序对于整数需要有余数的浮点数结果,使用浮点数,从而确保代码在python2.6中运行的时候/的一个操作数是浮点数:
X = Y // Z X = Y / float(Z)作为替代方法,我们可以使用一个__future__ import在python2.6中打开python3.0的/,而不是用浮点转换来强制它:
>>>from __future__ import division >>>10/4 2.5 >>>10//4 2
Floor除法 VS 截断除法
一个细微之处在于://操作符通常叫做截断除法,但是,更准确的说法是floor除法,它把结果向下截断到它的下层,即真正结果之下的最近的整数。并直接效果是向下舍入,并不是严格地截断,并且这对负数也有效。你可以使用python的math模块来自己查看其中的区别:
>>>import math >>>math.floor(2.5) 2 >>>math.floor(-2.5) -3 >>>math.trunc(2.5) 2 >>>math.trunc(-2.5) -2在执行除法操作的时候,只是真正截断了正的结果,因此截断除法和floor除法是相同的;对于负数,它就是一个floor结果(实际上,它们都是floor,但是对于正数来说,floor和截断是相同的)。下面是在python3.0中的情况:
>>>5/2,5/-2 (2.5,-2.5) >>>5//2,5//-2 (2,-3) >>>5/2.0,5/-2.0 (2.5,-2.5) >>>5//2.0,5//-2.0 (2.0,-3.0)python2.6中的例子:
>>>5/2,5/-2 (2,-3) >>>5//2,5//-2 (2,-3) >>>5/2.0,5/-2.0 (2.5,-2.5) >>>5//2.0,5//-2.0 (2.0,-3.0)如果你真的想要截断而不管符号,可以总是通过math.trunc来得到结果,而不管是什么python版本,python3.0中,如例:
>>>import math >>>5/-2 -2.5 >>>5//-2 -3 >>>math.trunc(5/-2) -2python2.6中例子:
>>>import math >>>5/float(-2) -2.5 >>>5/-2,5//-2 (-3,-3) >>>math.trunc(5/float(-2)) -2
相关文章推荐
- python3之数字(在实际应用中的数字--变量和基本表达式)
- python3之数字(在实际应用中的数字--数字显式的格式)
- python3之数字(在实际应用中的数字--比较:一般的和连续的)
- python3之数字(在实际应用中的数字--十六进制、八进制和二进制记数)
- Python除法:传统除法、Floor除法及真除法
- python3之数字(在实际应用中的数字--整数精度)
- python3之数字(在实际应用中的数字--复数)
- python unittest 深入failfast及实际应用【示例】
- Python3中的真除和Floor除法用法分析
- python字符串实际应用——总结(学习记录)
- Python字典在实际工作中的应用
- 应用 Python 解决一些实际问题
- 【Python】python 反射机制在实际的应用场景讲解
- Python os.getcwd()函数的实际应用方案介绍
- 零基础学python-5.3 数字变量与除法
- Python中类和对象的实际应用
- python应用_统计数字问题,计算书的页码
- 【线性代数公开课MIT Linear Algebra】 实际应用——python中的线性代数(1)
- python的简单实际应用(一)