Dlaczego dzielenie np 2/3 = 0

Dlaczego dzielenie np 2/3 = 0
A9
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 2 lata
  • Postów:43
0

Cześć, mam dzisiaj taki problem. Chcę w skrypcie podzielić dwie liczby np a = 2 / 3 i chcę wyświetlić wartość, to zamiast otrzymać liczbę po przecinku to otrzymuję 0. Czy jest możliwość zresetowania środowiska, albo naprawienia tego problemu?

LP
  • Rejestracja:około 7 lat
  • Ostatnio:19 dni
  • Postów:366
3

W pytonie masz dwa rodzaje dzielenia: dla liczb/cyfr całkowitych oraz zmiennoprzecinkowych. W Twoim przypadku obie cyfry są całkowite więc będzie wybrane dzielenie całkowite. Żebyś miał wynik przecinkowy to musisz jedną z cyfr zamienić na zmiennoprzecinkową np poprzez dodanie .0 na końcu czyli a = 2.0 / 3

Edit: Źródło: https://technikinformatyk.pl/kursy/kurs/python/lekcja/python-operatory-arytmetyczne/

edytowany 1x, ostatnio: lubie_programowac
GS
  • Rejestracja:ponad 8 lat
  • Ostatnio:2 dni
  • Postów:1265
2

@adrian95: Tak dziala dzielenie w pytonie na intach - wynik zaokraglany jest w dol Jeśli chcesz wartość typu rzeczywistego to:

Kopiuj
a = 2.0/3
edytowany 1x, ostatnio: GutekSan
PerlMonk
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa 🐪
  • Postów:1719
1

@GutekSan: Prędzej część po przecinku jest usuwana a nie zaokrąglana. Drobna różnica a jednak ;)


Nie sztuka uciec gdy w dupie sztuciec. 🐪🐪🐪
edytowany 1x, ostatnio: PerlMonk
GS
Napisałem zaokrąglana w dól co jest tożsame z usunięciem części po przecinku.
PerlMonk
Wynik ten sam, ale inaczej działa pod spodem.
szweszwe
A jaka jest różnica działania pod spodem?
PerlMonk
W przypadku obcięcia wartość jest tylko przepisywana.
Althorion
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:dzień
  • Postów:1605
3

Nie pisz niczego nowego w Pythonie 2, ten język jest już martwy. Python 3 ma w tym momencie prawie dwanaście lat, było naprawdę dużo czasu, żeby się przesiąść…

I Python 3 ma domyślnie właśnie dzielenie zmiennoprzecinkowe, zatem:

Kopiuj
>>> 2/3
0.6666666666666666
>>> 2//3
0
LP
Właśnie później doczytałem że jest jak mówisz. @adrian95 Tu jest prawidłowa odpowiedź: tzn dla pythona2 moja jest ok ale ... python2 nie jest ok.
lion137
Czytam to i się zastanawiam, czy mnie wyszukiwarka forum nie cofnęła w czasie :)
Shalom
py2 masterrace, wszystkich nas nie pokonacie! :P
GS
  • Rejestracja:ponad 8 lat
  • Ostatnio:2 dni
  • Postów:1265
3

@PerlMonk:
Masz rację w tym że faktycznie jest różnica. Tyle, że w Pytonie 2 jest właśnie zaokrąglanie w dół, a nie obcinanie wartości po przecinku.

Kopiuj
> 2/3
0
> 2.0/3
0.666666666667
> -2.0/3
-0.666666666667
> -2/3
-1

Gdyby było obcinanie wartości po przecinku, to ostatni wynik byłby -0, a nie -1.

edytowany 1x, ostatnio: GutekSan

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.