Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Bag ili šta? rezProtoklmin=varProtok*1;

[es] :: Javascript i AJAX :: Bag ili šta? rezProtoklmin=varProtok*1;

[ Pregleda: 1830 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Bag ili šta? rezProtoklmin=varProtok*1;31.12.2010. u 13:01 - pre 162 meseci
Napisao sam moj prvi jafascript program , uspešno, nakon debagovanja.

E sad, u switch grananju ovo radi: rezProtoklmin=varProtok*1; a ovo ne radi: rezProtoklmin=varProtok;. Kada naiđe na takvu naredbu tipa rezProtoklmin=varProtok jednostavno se ne izvrši ta komanda i sve iza nje.

Kod koji je dole dat je ispravan, ali ako izbacimo "*1" onda neće raditi na sledeći način: U case 0 se ne izvrši ništa, u case 1 se izvrši samo rezProtoklmin=varProtok*60;, a u case 2 se izvrši rezProtoklmin=varProtok/60*1000; rezProtoklsec=varProtok/3600*1000;.

Code:

switch(parseInt(propform.elements["varProtokjedinica"].value)) //kubnih metara u sekundi (l/s / 1000) (l/min * 60 / 1000) (m3/h / 3600)
            {
                case 0: //litara u minuti
                    rezProtoklmin=varProtok*1;
                    rezProtoklsec=varProtok/60;
                    rezProtokm3h=varProtok*60/1000;
                    varProtok=varProtok/60/1000; //kubnih metara u sekundi
                    break;
                case 1: //litara u sekundi
                    rezProtoklmin=varProtok*60;
                    rezProtoklsec=varProtok*1;
                    rezProtokm3h=varProtok*3600/1000;
                    varProtok=varProtok/1000;  //kubnih metara u sekundi
                    break;
                case 2:    //kubnih metara na sat
                    rezProtoklmin=varProtok/60*1000;
                    rezProtoklsec=varProtok/3600*1000;
                    rezProtokm3h=varProtok*1;    
                    varProtok=varProtok/3600;  //kubnih metara u sekundi
                    break;
                default:
                    document.write("Pogresna jedinica protoka: " + propform.elements["varProtokjedinica"].value);
            }


Pošto je ovo moj apsolutno prvi JS program, nemam pojma da li ja nešto propuštam da ukapiram ili ovo jeste bag?
 
Odgovor na temu

Branko Braco

Član broj: 44888
Poruke: 43
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Bag ili šta? rezProtoklmin=varProtok*1;31.12.2010. u 13:39 - pre 162 meseci
Meni jedino sto pada na pamet jest da ti nisi mozda prije toga definisao promjenjivu varProtok ili jesi ali je neka vrednost u njoj koja nije brojcanog tipa. Daj kompletan kod da vidimo jer ovako ne mogu znati koja je vrednost u promenjivoj varProtok.
 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Re: Bag ili šta? rezProtoklmin=varProtok*1;31.12.2010. u 14:28 - pre 162 meseci
Pa nema ništa posebno. varProtok je pročitan iz forme, ali nije "parsiran" (mada mi to ne pravi probleme na drugim mestima). Evo dela koda pre sviča:

Code:

function calc()
        {
            Korekcija=propform.elements["txtKorekcija"].value;
            Precnik=propform.elements["txtPrecnik"].value;
            Hrapavost=propform.elements["txtHrapavost"].value;
            varProtok=propform.elements["txtvarProtok"].value;
            Duzina=propform.elements["txtDuzina"].value;
            
            Precnik=Precnik/1000;
            Hrapavost=Hrapavost/1000;
            Duzina=Duzina;
            
switch(parseInt(propform.elements["varProtokjedinica"].value)) //kubnih metara u sekundi (l/s / 1000) (l/min * 60 / 1000) (m3/h / 3600)
            {
                case 0: //litara u minuti
                    rezProtoklmin=varProtok*1;
                    rezProtoklsec=varProtok/60;
                    rezProtokm3h=varProtok*60/1000;
                    varProtok=varProtok/60/1000; //kubnih metara u sekundi
                    break;
                case 1: //litara u sekundi
                    rezProtoklmin=varProtok*60;
                    rezProtoklsec=varProtok*1;
                    rezProtokm3h=varProtok*3600/1000;
                    varProtok=varProtok/1000;  //kubnih metara u sekundi
                    break;
                case 2:    //kubnih metara na sat
                    rezProtoklmin=varProtok/60*1000;
                    rezProtoklsec=varProtok/3600*1000;
                    rezProtokm3h=varProtok*1;    
                    varProtok=varProtok/3600;  //kubnih metara u sekundi
                    break;
                default:
                    document.write("Pogresna jedinica protoka: " + propform.elements["varProtokjedinica"].value);
            }
...i tako dalje...

hehe, sad sam primetio da u kodu imam jednu potpuno besmislenu naredbu Duzina=Duzina; . Ali ona verovatno nije problem
 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Re: Bag ili šta? rezProtoklmin=varProtok*1;31.12.2010. u 14:52 - pre 162 meseci
Update:

Sada sam ponovio problem, da se podsetim tačno kakva je greška. Dalke, nije da se ništa ne izvrši iza te problematične dodele vrednosti, jer se uvek izvršava zadnja komanda pre break (varProtok=varProtok/ ... ;). Tako da pretpostavljam da nije stvar u izvršavanju dodele vrednosti, nego u tome da se ta vrednost ne vidi kasnije u formi iz nekog razloga. Evo kako izgleda deo koji te vrednosti vraća na web stranicu:

Code:

            propform.elements["txtrezProtoklmin"].value = rezProtoklmin.toPrecision(4);
            propform.elements["txtrezProtoklsec"].value = rezProtoklsec.toPrecision(4);
            propform.elements["txtrezProtokm3h"].value = rezProtokm3h.toPrecision(4);


U međuvremenu (od gore navedenog koda do ovog ovde navedenog) se rezProtok... variable uopšte ne diraju.

Dakle, ako se izvrši case 0:
Code:

rezProtoklmin=varProtok;
rezProtoklsec=varProtok/60;
rezProtokm3h=varProtok*60/1000;

ne vidi se kasnije nijedna vrednost u poljima txtrezProtok...

ako se izvrši case 1:
Code:

rezProtoklmin=varProtok*60;
rezProtoklsec=varProtok;
rezProtokm3h=varProtok*3600/1000;

Vidi se kasnije samo vrednost u polju txtrezProtoklmin.

ako se izvrši case 2:
Code:

rezProtoklmin=varProtok/60*1000;
rezProtoklsec=varProtok/3600*1000;
rezProtokm3h=varProtok;

Vide se kasnije obe vrednosti sem txtrezProtokm3h

[Ovu poruku je menjao pisac dana 31.12.2010. u 16:26 GMT+1]
 
Odgovor na temu

Branko Braco

Član broj: 44888
Poruke: 43
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Bag ili šta? rezProtoklmin=varProtok*1;31.12.2010. u 15:01 - pre 162 meseci
E stvarno ne kontam, kod mene radi sve kako treba, isprobano u IE u Chrome i firefox, pokusavao sam unositi i ne brojcane unose ali radi jedino sto onda promenjive dobju NaN vrednost.
Jedino da si pogresno napisao ime od input polja za unos ali u tom slucaju ne bi ti se izvrsilo nista. Sad je samo pitanje mjesta gdje ti prikazujes te vrednosti koje su izracunate, da nemas prije toga neki kod koji ti pokvari vrednosti, na primjer promenjivima prilikom definisanja nisi stavio var ispred pa one postaju globalne za citav kod tako da na njih moze uticati nesto i izvan funkcije u kojima si ih definisao.

E pa jbg ovo sam napisao pre nego sam vidio ti zadnju poruku :)
 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Re: Bag ili šta? rezProtoklmin=varProtok*1;31.12.2010. u 15:08 - pre 162 meseci
Evo rešio sam problem.

Umesto

varProtok=propform.elements["txtvarProtok"].value;

Stavio sam

varProtok=parseFloat(propform.elements["txtvarProtok"].value);

I sada radi i bez "*1".

Ali mi nije baš jasna logika po kojoj to prestaje nadalje da radi u okviru jednog Case-a ako se izvrši rezProtok=varProtok, a radi sa varProtok*1.

Browser je inače Opera 10.10, a isto se ponaša i na Konqueroru. Firefox ne mogu trenutno da probam, a Chrome i IE nemam.
 
Odgovor na temu

Branko Braco

Član broj: 44888
Poruke: 43
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Bag ili šta? rezProtoklmin=varProtok*1;31.12.2010. u 15:16 - pre 162 meseci
Da greska je u tome sto toPrecision funkcija radi sa brojevima, a input polje vraca string vrednost a ne broj, pa kad pomnozis tu promenjivu sa 1 automatski se ona prebaci u broj i nije vise string i onda nemas problema, tako isto se desava i sa djeljenjem i ostalim matematickim operacijama, a ako ne izvrsis nikakvu matematicku operaciju nad njom ona ostaje string a toPrecision funkcija nije dio stringa.
Znaci umjesto ovoga varProtok=propform.elements["txtvarProtok"].value;
stavi ovo varProtok=parseInt(propform.elements["txtvarProtok"].value);

Jbg opet si me prestigao
 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Re: Bag ili šta? rezProtoklmin=varProtok*1;31.12.2010. u 15:24 - pre 162 meseci
Da, ali mi je čudno što ne radi rezProtokm3h=varProtok*60/1000 kada je iza rezProtoklmin=varProtok, ali sasvim slična komanda rezProtoklmin=varProtok/60*1000 radi kada je ispred rezProtokm3h=varProtok.

Na koji to način rezProtoklmin=varProtok uništava mogućnost da se dalje radi sa varProtok kao brojčanom vrednošću, a pre toga je moglo? Izgleda da se pri prvoj dodeli vrednosti u kojoj se ne proizvodi matematički rezultat, ta promenljiva varProtok zauvek pretvara u čisto tekstualnu (a do tada je bila ambivalentna i mogla je da se koristi u matematičkim operacijama)? Zanimljivo.
 
Odgovor na temu

Branko Braco

Član broj: 44888
Poruke: 43
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Bag ili šta? rezProtoklmin=varProtok*1;31.12.2010. u 15:38 - pre 162 meseci
Vidi nije problem u delu koda koji izracunava vednosti, problem je posle kada ti pokusvas prikazati te vrednosti, onog momenta kad pokusas textualni oblik vrednosti obraditi sa funkcijom toPrecision koja nije sastavni dio stringa dogodi se greska i dalje se vise nece nista izvrsiti.

Pokusaj vrednosti prikazati bez toPrecision funkcije pa ces vidis da ces dobjes sve vrednosti uredno. Zato ja i nisam mogao odma provaliti u cemu je problem dok nisi pokazao kako vadis posle vrednosti da prikazes.
 
Odgovor na temu

MilosDj
Milos Djuric
Belgrade

Član broj: 14174
Poruke: 307
*.dynamic.isp.telekom.rs.



+4 Profil

icon Re: Bag ili šta? rezProtoklmin=varProtok*1;30.01.2011. u 17:12 - pre 161 meseci
var n = parseInt(v,10); // ,10 = base 10, REQUIRED! stops at first non digit char!

Uvek stavljaj ,10) u parseInt. Jer se moze desiti da ti string pocinje sa 0 i onda f ne zna sta ti zaista hoces! Decimal, Octal, Hex?!?
I'm not in this world to live up to your expectations and you're not in this world to live up to mine.
 
Odgovor na temu

[es] :: Javascript i AJAX :: Bag ili šta? rezProtoklmin=varProtok*1;

[ Pregleda: 1830 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.