NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
IT rekvalifikace s podporou uplatnění. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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 Hartinger
Vlastník
Avatar
Odpovídá na Theodor Johnson
David Hartinger: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
New kid back on the block with a R.I.P
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 Hartinger
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 Hartinger
Vlastník
Avatar
Odpovídá na Theodor Johnson
David Hartinger: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
New kid back on the block with a R.I.P
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.