jestem bardzo mylić z zachowaniem jak pokazano poniżej:Different wynikiem modulo i interger Division dla pływaka i dziesiętne
>>> (-7) % 3
2
>>> Decimal('-7') % Decimal('3')
Decimal('-1')
>>>
>>> (-7) // 3
-3
>>> Decimal('-7') // Decimal('3')
Decimal('-2')
>>>
Może ktoś proszę wyjaśnić?
pokrewne: [raport ten bug.] (Http://bugs.python.org/issue12005) – Makoto
Obie są poprawne, ale są oparte na różnych definicjach dwuznacznego działania modułu, gdy stosowane do liczb ujemnych - ' 3 * -3 + 2 == -7' i '3 * -2-1 == -7'. Określony język/biblioteka/implementacja zwykle wybiera jedną definicję, więc fakt, że natywne liczby całkowite i "dziesiętne" zachowują się inaczej w tej wersji Pythona, z pewnością można uznać za błąd - jest to przynajmniej zaskakująca niekonsekwencja, jak zauważyłeś. Jest to prawdopodobnie także celowa decyzja, ale nie mam pojęcia, co może być uzasadnione, jeśli jest ... – twalberg
@twalberg: moduł dziesiętny Pythona jest bezpośrednio zgodny ze standardem dziesiętnym IBM, który określa operator pozostały z przedstawioną semantyką. Więc kiedy wprowadzono moduł dziesiętny, musieliśmy stosować te semantyki zamiast tych już istniejących dla typu 'float'. To jest uzasadnienie dla różnicy. Możemy * mogli * zdecydować, aby w ogóle nie przesłonić '%' dla obiektów dziesiętnych i po prostu udostępnić określoną operację pozostałą jako metodę, ale wygodniej jest mieć dostępną '%' pisownię. (Praktyczność bije czystość i tak dalej.) –