SWiSH Forum
Forum użytkowników programów SWiSH

SWiSH Max - Linia kodu

vanioch - Sro 07 Gru, 2011 11:49
Temat postu: Linia kodu
Witam cz ktoś może mi wytłumaczyć dlaczego ta linijka kodu powoduje zaokrąglenie liczby do miejsc poprzecinku tulu ile jest w zmiennej d? w sensie co tu się dzieje?
Kod:

var d = 0.00001;
  wynik.text=Math.round (Number((liczba))/d)*d;

shastaan - Sro 07 Gru, 2011 13:25

Nie wiem co tu się dzieje bo "liczba" nie jest zmienną (przynajmniej tutaj nie jest zdefiniowana).
Nie wiem co tu robi to Number.
Nie wiem co zamierzałeś.

Krótko mówiąc ta linijka kodu może coś powoduje u Ciebie ale bez kontekstu zwraca NaN.

Zwróć jednak uwagę na to, że *d jest poza nawiasem. Wynik.text to zaokrąglony wynik jakiegoś ilorazu pomnożony przez 0.00001 więc musi mieć tyle miejsc po przecinku ile var d. Pewnie to źle zapisałeś. Najpierw zaokrągliłeś a potem pomnożyłeś przez 0.00001. To nie w tym błąd?

espe1 - Sro 07 Gru, 2011 13:59

funkcja zaokrąglania:

Kod:

onFrame (1) {
Math.format = function( num, precision, splitCharacter){
if((precision = Math.abs(precision)) == 0) return Math.round(num);
if(splitCharacter == null) splitCharacter = ".";
return  Math.round(num) + splitCharacter + Math.round(num * Math.pow( 10, precision)).toString().substr(-precision);   
}
trace(Math.format(12.345, 2)); //(liczba, liczba miejsc po przecinku)
trace(Math.format(12.34, 2));
trace(Math.format(12.3, 2));
trace(Math.format(12., 2));
trace(Math.format(12, 2));
trace(Math.format(0.345, 2));
trace(Math.format(.345, 2));
trace(Math.format(0.045, 2));
trace(Math.format(0.04, 5));
}

vanioch - Sro 07 Gru, 2011 15:14

shastaan napisał/a:
Nie wiem co tu się dzieje bo "liczba" nie jest zmienną (przynajmniej tutaj nie jest zdefiniowana).
Nie wiem co tu robi to Number.
Nie wiem co zamierzałeś.

Krótko mówiąc ta linijka kodu może coś powoduje u Ciebie ale bez kontekstu zwraca NaN.

Zwróć jednak uwagę na to, że *d jest poza nawiasem. Wynik.text to zaokrąglony wynik jakiegoś ilorazu pomnożony przez 0.00001 więc musi mieć tyle miejsc po przecinku ile var d. Pewnie to źle zapisałeś. Najpierw zaokrągliłeś a potem pomnożyłeś przez 0.00001. To nie w tym błąd?


kod poprawiony powinien tak wyglądać

Kod:

input.text=liczba;
var d = 0.00001;
 wynik.text=Math.round (Number((liczba))/d)*d;


Wszystko tu działa tylko moje pytanie jest czy to jest jedyny sposób zaokrąglania liczb do tylu ile chcę mijsc po przecinku? oraz jeszcze pytanie teoretyczne: w niektórych skryptach zmienne mają przed soba var a niektóre nie, jaka jest zasada stosowania var?

shastaan - Sro 07 Gru, 2011 18:33

Orajt, nie zrozumiałem pytania.
Nie znałem nawet tego sposobu i obawiam się, że nie podam Ci innego.

Zasada stosowania var jest taka, że jak podasz w jakiejś funkcji zmienną:

n=3;

o on rozpozna "3" jako numer i sam sobie dopowie, że z n chodziło Ci o var typu number i zeby jej przypisać wartość 3. Jeśli napiszesz:

tekst = alamakota;

to on rozpozna "alamakota" jako string i sam sobie dopowie resztę.

Jeśli chcesz to robić za każdym razem porządnie (albo raz na 3 lata chcesz zeby zinterpretował numer jako stringa) to wykorzystaj pełną składnie var (którą znajdziesz, na przykład, w helpie swisha).

espe1 - Sro 07 Gru, 2011 19:46

możesz napisać np:

Kod:

var x: Number = 10;

//lub prościej :-):

x = 10;


Powered by phpBB modified by Przemo © 2003 phpBB Group