Diskuze: Dělení celých čísel v Javě
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Java (a nejen Java) totiž při konverzi z doublu na int zahodí desetinná místa, zatímco floor zaokrouhlí na největší celé číslo, které je menší než to původní.
Co jsem koukal, tak i Python, ale nelíbí se mi, že musím předávět celá čísla na double, aby to počítalo "dobře".
Musí na to být nějaký vzorec, co používá celá čísla.
To je nedostatek již zastaralého 2.7, v dalších verzích je to opraveno. Jentak pro info, aktuálně nejnovější je verze 3.6, ve které se objevují veškeré novinky. Python 2.7 má jednu aktualizaci zhruba za půl roku a vývoj od roku 2014 téměř stojí, až na nějaké bezpečností aktualizace. Pokud nepotřebuješ, aby SW jel na nějaké zastaralé mašině nebo používal archaické knihovny, přejdi na 3
Jsi si jistý? Já to zkoušel na python.org a chová se to stejně jako v 3.4. A řeším hlavně, jak to je v Javě
Ano, jsem
V Javě i spustě jiných jazycích to samozřejmě s intem nefunguje, jak už
bylo řečeno, ale já opravoval tvé nesprávné tvrzení o počítání v
Pythonu.
Jenže ty opravuješ tvrzení, co tu nikdo neřekl a příklad, který nepotřebuje.
Řeším to, když se to desetinné číslo převede na integer. Tak vyjde 0 a ne -1. Kód na vyzkoušení:
int(-60/100)
Napsal
Co jsem koukal, tak i Python, ale nelíbí se mi, že musím předávět celá čísla na double, aby to počítalo "dobře".
Jenže Python počítá "dobře" i bez převodu celých čísel na double. A ten komentář vyzněl tak, že by klidně použil Python, jenže se mylně domnívá, že to v Pythonu nefunguje.
Fakt, že napsání int(0.6) usekne část za tečkou jsi už zmínil.
Úplně mi vypadlo, že v Pythonu funguje
-60//100
avšak v Javě nic takového není.
Pokud chceš offset jenom za pomocí int a všechno mezi -100 až -1 má vracet -1, -200 až -101 má vracet -2 atd. tak by mohlo posloužit:
(x - (x >>> 31) * 99) / 100 // (x >>> 31) vrátí 1 pokud je x záporné, pokud je kladné tak to vrátí 0
Ve skutečnosti to mám jako 160, ale chápu princip výpočtu a funguje to, díky
Zobrazeno 14 zpráv z 14.