Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
pangas
Člen
Avatar
pangas:31.3.2016 15:40

Zdravím, narazil jsem na takovou banalitu, které ale nerozumím...

v následující části kódu mam deklarovanou globální proměnnou a mám problém s jejím výpisem.
výpis by měl být "0.25" ale stále mi zobrazuje pouze "0".
Tak se ptám, v čem je zakopanej pes.. Díky.

const int hod = 24;
double dil = 360 / (hod*60);

int main()
{
        cout  << dil;
        return 0;
}
Editováno 31.3.2016 15:42
 
Odpovědět
31.3.2016 15:40
Avatar
Martin Novák
Tvůrce
Avatar
Odpovídá na pangas
Martin Novák:31.3.2016 16:09

Ahoj, problém je v tom, že máš proměnnou "hod" typu int. Výsledek ti to tím pádem házelo celočíselný :) Změň jej na desetinný typ :)

Editováno 31.3.2016 16:11
 
Nahoru Odpovědět
31.3.2016 16:09
Avatar
Odpovídá na pangas
Libor Šimo (libcosenior):31.3.2016 16:45

Tak po 1. skus zabudnut na globalne prremenne a po 2. malo by stacit ked namiesto 360 pouzies 360.0

Nahoru Odpovědět
31.3.2016 16:45
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Jakub Šilhavý:31.3.2016 16:57
#include <iostream>

const int hod = 24;
double dil = (double)360 / (hod * 60);

int main(){
        std::cout << dil;
        return 0;
}
Nahoru Odpovědět
31.3.2016 16:57
Život je pes, a proto žít je psina.
Avatar
David Novák
Tvůrce
Avatar
Odpovídá na pangas
David Novák:31.3.2016 17:15

Doplním kolegy, kteří již sdělili správné řešení..

Děje se to kvůli implicitním konverzím. Typ výsledku operací je dán operandy - tj. když například sčítáš int a double, tak ti vyjde double (double má vyšší prioritu), když double a double, tak double a když int a int, tak int.

Ty dělíš int intem a tak vlastně děláš celočíselné dělení (desetinná část se zahazuje). Proč to tak je? Někdy to tak můžeš chtít ;)

Řešení je jednoduché - buď jeden z operandů přetypovat na double:

(double) 360

Nebo ještě jednodušeji přepsat ten int literál na double literál (to samozřejmě může fungovat jen když pracuješ s literály):

360.0
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
31.3.2016 17:15
Chyba je mezi klávesnicí a židlí.
Avatar
pangas
Člen
Avatar
pangas:31.3.2016 17:20

Vyčerpávající, díky všem

 
Nahoru Odpovědět
31.3.2016 17:20
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.