2011-10-26 11 views
6

Jestem mylić o następującym całkowitej matematyki w Pythonie:Integer podział w Pythonie

-7/3 = -3 od (-3)*3 = -9 < -7. Rozumiem.

7/-3 = -3 Nie rozumiem, jak to jest zdefiniowane. (-3)*(-3) = 9 > 7. Moim zdaniem powinno być -2, ponieważ (-3)*(-2) = 6 < 7.

Jak to działa?

+0

Python generalnie podąża za zasadą najmniejszego zdziwienia. Po prostu zaokrągla w dół dla podziału całkowitoliczbowego. – Chriszuma

+3

Oto uzasadnienie, prosto z samego bdfl: http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html –

+1

Dla osób przybywających tutaj w celu pomocy w dzieleniu całkowitym: In Python 3, podział całkowity jest wykonywany za pomocą '//', np '-7 // 3 = -3', ale' -7/3 = -2.33..'. – poke

Odpowiedz

13

Z documentation:

Na (zwykły lub długi) podziału liczbą całkowitą, jest liczbą całkowitą. Wynik jest zawsze zaokrąglany do minus nieskończoności: 1/2 to 0, (-1)/2 to -1, 1/(- 2) to -1, a (-1)/(- 2) to 0.

Zaokrąglenie w kierunku wyjaśnia zachowanie, które widzisz.

+0

Ups, brakowało tego. Chociaż mi się to nie podoba, teraz widzę, jak to działa. – Jonathan

4

Jak to działa:

int(x)/int(y) == math.floor(float(x)/float(y)) 
0

Python zaokrągla w dół. 7/3 = 2 (2 + 1/3) -7/3 = -3 (-2 + 1/3)

1

Rozszerzanie odpowiedzi od aix i robert.

Najlepszym sposobem, aby myśleć o tym w kategoriach zaokrąglenie w dół (w kierunku minus nieskończoność) zmienno wynik:

-7/3 = floor(-2.33) = -3

7/-3 = floor(-2.33) = -3

0

/służy do zmiennoprzecinkowych podział // służy do dzielenia liczby całkowitej (zwraca liczbę całkowitą)

A python zaokrągla wynik w dół