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í.
Pouze tento týden sleva až 80 % na e-learning týkající se Pythonu. Zároveň využij slevovou akci až 30 % zdarma při nákupu e-learningu - Více informací.
python week + discount 30
Avatar
Theodor Johnson
Tvůrce
Avatar
Theodor Johnson:24.9.2012 19:17

funkce

int i;
if (int.TryParse(textBox1.Text, out i))
{
     p_percentage = ((i / songsDuration) * 100);
}

mi nastavuje p_percentage na nulu, nemůžu najít chybu, řekl bych že po matematické stránce je to správně,
ještě bych měl dodat že

textBox1.Text = //zkoušel jsem 12,23,150,200,230
songDuration = 235;  // int
p_percentage = 0;    // double

nastaveno od vytvoření formu

pokaždé když textBox1.Text je menší než songDuration tak mi to nastaví p_percentage na nulu, když je větší tak se p_percentage zaokrouhlí na násobek 100

Odpovědět
24.9.2012 19:17
Mo8ilε 15 Ѐλđ
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Theodor Johnson
David Čápka:24.9.2012 19:44

Protože dělíš celočíselně, vždy ti vyjde 0 a tu vynásobíš 100.

Zkus tohle:

(i / (float)songsDuration) * 100
Nahoru Odpovědět
24.9.2012 19:44
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Theodor Johnson
matesax:24.9.2012 19:46

Správně:

float i, songsDuration = 235, p_percentage = 0;

if (float.TryParse(textBox1.Text, out i))
    p_percentage = i / songsDuration * 100;
Editováno 24.9.2012 19:47
 
Nahoru Odpovědět
24.9.2012 19:46
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na David Čápka
Theodor Johnson:24.9.2012 19:53

díky, to přetypováni int na float číslo mi pomohlo, ovšem nechápu proč číslo ve formátu int je nutné přetypovat na float, když zůstane stejné

Nahoru Odpovědět
24.9.2012 19:53
Mo8ilε 15 Ѐλđ
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Theodor Johnson
David Čápka:24.9.2012 20:10

Když dělíš 2 celá čísla, C# předpokládá, že je chceš dělit celočíselně. Může to být matoucí, protože je ukládáš do float, ale stále to je dělení 2 celých čísel. Stejně tak ti dělení 2 floatů vrátí float a to i když ta čísla nebudou mít desetinná místa.

Nahoru Odpovědět
24.9.2012 20:10
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Theodor Johnson
matesax:24.9.2012 20:11

Bylo ti to již vysvětleno - způsobuješ tím celočíselné dělení - tedy číslo, které vyjde, je menší než nula, což je celočíselně 0...

Editováno 24.9.2012 20:11
 
Nahoru Odpovědět
24.9.2012 20:11
Avatar
Theodor Johnson
Tvůrce
Avatar
Theodor Johnson:24.9.2012 20:19

Díky za pomoc.

Nahoru Odpovědět
24.9.2012 20:19
Mo8ilε 15 Ѐλđ
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 7 zpráv z 7.