Целочисленное деление на Python 3 - странный результат с отрицательным числом
Я новичок в Python, и сейчас я изучаю операторов.
Я понял, что:
- Оператор
/
используется для floating point division
и
-
//
для integer division
.
Пример:
7//3 = 2
И 7//-3=-3
. Почему ответ -3
?
Я застрял здесь.
Ответы
Ответ 1
//
не является целым делением, но floor:
7/-3 -> -2.33333...
7//-3 -> floor(7/-3) -> floor(-2.33333...) -> -3
PEP 238
о смене оператора отдела:
Оператор //
будет доступен для запроса однозначного разделения floor.
См. также Почему Python Integer Division Floors (благодаря @eugene y) - В основном 7//-3
- -7//3
, поэтому вы хотите иметь возможность писать:
-7 = 3 * q + r
С q
целое число (отрицательное, положительное или nul) и r
целое число такое, что 0 <= r < 3
. Это работает, только если q = -3
:
-7 = 3 * (-3) + 2
Ответ 2
//
- оператор разделения полов.
Это означает, что после завершения деления применяется функция "пол" (значение, полученное из деления, округляется до ближайшего целого независимо от того, больше или меньше десятичной части .5)
Что касается вашего примера, обратите внимание на то, что для отрицательных ответов оператор разделения пола все равно будет округлять (например, -5/2 → -2,5 → -3).