Diskuze: výpis proměnné v C++

C++ C a C++ výpis proměnné v C++

Avatar
pangas
Člen
Avatar
pangas:

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. března 15:42
 
Odpovědět 31. března 15:40
Avatar
Martin Novák
Redaktor
Avatar
Odpovídá na pangas
Martin Novák:

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. března 16:11
 
Nahoru Odpovědět 31. března 16:09
Avatar
Odpovídá na pangas
Libor Šimo (libcosenior):

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. března 16:45
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Jakub Šilhavý:
#include <iostream>

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

int main(){
        std::cout << dil;
        return 0;
}
Nahoru Odpovědět 31. března 16:57
Život je pes, a proto žít je psina.
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovídá na pangas
David Novák:

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í
+1 bodů
Řešení problému
Nahoru Odpovědět  +2 31. března 17:15
Chyba je mezi klávesnicí a židlí.
Avatar
pangas
Člen
Avatar
pangas:

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

 
Nahoru Odpovědět 31. března 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.