No Python 3.x, 5 / 2retornará 2.5e 5 // 2retornará 2. O primeiro é a divisão de ponto flutuante e o segundo é a divisão de piso , às vezes também chamada de divisão inteira .
No Python 2.2 ou posterior na linha 2.x, não há diferença para números inteiros, a menos que você execute a from __future__ import division, o que faz com que o Python 2.x adote o comportamento 3.x.
Independentemente da importação futura, 5.0 // 2retornará, 2.0já que esse é o resultado da divisão de piso da operação.
editado: Você pode "consertar" a divisão desde o Python 2.2! (Basta ler o PEP ligado)
u0b34a0f6ae
2
também python -Qnew. outras opções de divisão: -Qold(padrão), -Qwarn,-Qwarnall
John La Rooy
2
Vale ressaltar que 5.0 / 2retorna 2.5em todas as versões, assim como 5 / 2.0- o antigo comportamento só é diferente quando os dois operandos o são int.
Chris
2
E quando os números são negativos? O comportamento é o mesmo para números inteiros negativos?
Aaron Franke
1
@Srinivasu Seu exemplo não é útil. Melhor seria 5 // 2 (que produz 2) e -5 // 2 (que produz -3).
Marvin
67
Esclarecimento sobre o Python 2.x:
Esclarecer para a linha Python 2.x, /não é divisão de piso nem divisão verdadeira. A resposta atual aceita não é clara sobre isso.
/é a divisão do piso quando os dois argumentos são int, mas é a verdadeira divisão quando um ou ambos os argumentos sãofloat .
O exposto acima diz mais verdade e é mais claro que o segundo parágrafo da resposta aceita.
Esta é uma boa resposta. O link do PEP é útil. Além disso, considere usar math.floor()ou math.fmod()se não tiver certeza do que está acontecendo com os operadores unários.
Scott Lowrey
/e //são operadores binários (dois operandos, esquerda e direita, numerador e denominador)
iono
28
/ -> Divisão de ponto flutuante
// -> Divisão de pisos
Vamos ver alguns exemplos no python 2.7 e no Python 3.5.
E quando os números são negativos? O comportamento é o mesmo para números inteiros negativos?
Aaron Franke
1
Re: Negativos - O comportamento é o mesmo, mas lembre-se que o resultado é andar, então o arredondamento é sempre para baixo em direção a mais negativa . Alguns exemplos: -100 // 33=> -4 ; 100 // -33=> -4 ; mas, devido à direção de arredondamento da função do piso, a próxima pode parecer contra-intuitiva quando comparada à anterior: -100 // -33=> 3 .
Erdős-Bacon
22
Como todo mundo já respondeu, //é a divisão do piso.
Por que isso é importante é que //é uma divisão sem ambiguidade, em todas as versões do Python da 2.2, incluindo as versões do Python 3.x.
Não tinha percebido que a divisão de piso também funciona com não-inteiros. Obrigado!
Mike
5
Python 2.7 e outra versão futura do python:
Divisão ( /)
Divide o operando da mão esquerda pelo operando da mão direita
Exemplo: 4 / 2 = 2
Divisão de Chão ( //)
A divisão dos operandos em que o resultado é o quociente no qual os dígitos após o ponto decimal são removidos. Mas se um dos operandos for negativo, o resultado será calculado, ou seja, arredondado para longe de zero (em direção ao infinito negativo):
Rumo ao infinito e longe do zero são coisas diferentes. Exemplo para (-1.2 e 3.4): "piso" está no sentido do infinito negativo (-2 e 3), "truncamento" está no sentido de zero (-1 e 3), "saturação" está longe de zero (-2 e 4), e "teto" é para o infinito positivo (-1 e 4).
As respostas acima são boas. Eu quero adicionar outro ponto. Até alguns valores, ambos resultam no mesmo quociente. Depois desse operador de divisão de andar ( //), funciona bem, mas não o /operador de divisão ( ).
//
operador para fazer a divisão inteira.Respostas:
No Python 3.x,
5 / 2
retornará2.5
e5 // 2
retornará2
. O primeiro é a divisão de ponto flutuante e o segundo é a divisão de piso , às vezes também chamada de divisão inteira .No Python 2.2 ou posterior na linha 2.x, não há diferença para números inteiros, a menos que você execute a
from __future__ import division
, o que faz com que o Python 2.x adote o comportamento 3.x.Independentemente da importação futura,
5.0 // 2
retornará,2.0
já que esse é o resultado da divisão de piso da operação.Você pode encontrar uma descrição detalhada em https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator
fonte
python -Qnew
. outras opções de divisão:-Qold
(padrão),-Qwarn
,-Qwarnall
5.0 / 2
retorna2.5
em todas as versões, assim como5 / 2.0
- o antigo comportamento só é diferente quando os dois operandos o sãoint
.Esclarecimento sobre o Python 2.x:
Esclarecer para a linha Python 2.x,
/
não é divisão de piso nem divisão verdadeira. A resposta atual aceita não é clara sobre isso./
é a divisão do piso quando os dois argumentos sãoint
, mas é a verdadeira divisão quando um ou ambos os argumentos sãofloat
.O exposto acima diz mais verdade e é mais claro que o segundo parágrafo da resposta aceita.
fonte
//
implementa "divisão de piso", independentemente do seu tipo. Então1.0/2.0
dará0.5
, mas ambos1/2
,1//2
e1.0//2.0
dará0
.Consulte https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator para obter detalhes
fonte
math.floor()
oumath.fmod()
se não tiver certeza do que está acontecendo com os operadores unários./
e//
são operadores binários (dois operandos, esquerda e direita, numerador e denominador)/ -> Divisão de ponto flutuante
// -> Divisão de pisos
Vamos ver alguns exemplos no python 2.7 e no Python 3.5.
Python 2.7.10 vs. Python 3.5
Python 2.7.10 vs. Python 3.5
Agora, se você deseja ter (no python 2.7) a mesma saída do python 3.5, você pode fazer o seguinte:
Python 2.7.10
Onde, como não há diferenças entre a divisão Floor no python 2.7 e no python 3.5
fonte
-100 // 33
=> -4 ;100 // -33
=> -4 ; mas, devido à direção de arredondamento da função do piso, a próxima pode parecer contra-intuitiva quando comparada à anterior:-100 // -33
=> 3 .Como todo mundo já respondeu,
//
é a divisão do piso.Por que isso é importante é que
//
é uma divisão sem ambiguidade, em todas as versões do Python da 2.2, incluindo as versões do Python 3.x.O comportamento de
/
pode mudar dependendo de:__future__
Importação ou não (módulo local)-Q old
ou-Q new
fonte
fonte
Python 2.7 e outra versão futura do python:
/
)Divide o operando da mão esquerda pelo operando da mão direita
Exemplo:
4 / 2 = 2
//
)A divisão dos operandos em que o resultado é o quociente no qual os dígitos após o ponto decimal são removidos. Mas se um dos operandos for negativo, o resultado será calculado, ou seja, arredondado para longe de zero (em direção ao infinito negativo):
Exemplos:
9//2 = 4
e9.0//2.0 = 4.0
,-11//3 = -4
,-11.0//3 = -4.0
A
/
divisão e o//
operador da divisão de piso estão operando de maneira semelhante.fonte
A barra dupla,,
//
é a divisão do piso:fonte
//
é a divisão do piso, ele sempre fornecerá o piso inteiro do resultado. O outro é a divisão "regular".fonte
A resposta da equação é arredondada para o próximo inteiro menor ou flutuante com 0,0 como ponto decimal.
fonte
As respostas acima são boas. Eu quero adicionar outro ponto. Até alguns valores, ambos resultam no mesmo quociente. Depois desse operador de divisão de andar (
//
), funciona bem, mas não o/
operador de divisão ( ).fonte
5.0//2
resulta em2.0
, e não2
porque o tipo de retorno do valor de retorno de//
operador segue as regras de coerção python (conversão de tipo).O Python promove a conversão do tipo de dados mais baixo (número inteiro) para o tipo de dados mais alto (float) para evitar a perda de dados.
fonte
//
é a divisão de piso, sempre fornecerá o valor mínimo do resultado./
é a divisão de ponto flutuante.Seguintes são a diferença entre
/
e//
; Eu executei essas operações aritméticas no Python 3.7.2fonte