PDA

Просмотр полной версии : Number


splash
13.01.2003, 11:17
Скажите, плз, а зачем вообще нужен Number, и подскажите как округлять числа до десятых, сотых и т.д.
Спасибо!

Usnul
13.01.2003, 14:22
Da na zdorov'e! ja i sam ne znau kak ih okrugliat', ja licho s etoj zadachej pri pomoschi funkcii spravlialsia.

iLoveYou
13.01.2003, 17:07
MovieClip.prototype.roundTo = function(theNumber, decPlaces) {
if (decPlaces>=0) {
var temp = Math.pow(10, decPlaces);
return Math.round(theNumber*temp)/temp;
}
};
//применение
trace (roundTo(1.14579, 2))

ЗЫ RTFM

[subway]design
13.01.2003, 17:36
Хорошо, конечно, но правильней будет:

Math.__proto__.roundTo(...){...}

Лучше расширять Math, а не MovieClip, все-таки :)

iLoveYou
13.01.2003, 17:39
Полностью согласен.

ish
13.01.2003, 17:40
Оригинал написал(а) [subway]design
Хорошо, конечно, но правильней будет:

Math.__proto__.roundTo(...){...}

Лучше расширять Math, а не MovieClip, все-таки :)

очччень интересно :)

iLoveYou
13.01.2003, 17:46
ish, что-то смущает?

[subway]design
13.01.2003, 17:47
Я в синтаксисе ошибся?

iLoveYou
13.01.2003, 17:52
Да, вроде, должно работать.
Да, работает.

ish
13.01.2003, 17:55
ну как бы это... хм :)
ну вот пишем:

Math.__proto__.test = function(v) {
trace(v)
}

запускаем :)


Math.test(1)
MovieClip.test(2)
Object.test(3)
MovieClip.prototype.test(4)
new Object().test(5)
new Array().test(6)

пример понятен? :) нужны разьяснения?

Nox Noctis
13.01.2003, 18:15
да простит меня Великий Шаман... :)))

trace(Math.__proto__ == Object.prototype);

и всиооо..... :)

ish
13.01.2003, 18:17
ну нокс взял и все испортил :) я ж было приготовил цельную лекцию на тему )

[subway]design
13.01.2003, 18:20
Я не думал, что есть такая дурь... А что, не существует способов расширить конкретный объект?

(Я понимаю, конечно, что расширять объекты - это изврат сам по себе, не по сишному. Вот классы расширять - это нормально)

ish
13.01.2003, 18:23
2[subway]design
ты будешь смеяться :)))) "расширить" обьект не просто, а очень просто... достаточно сделать следующее :)

math.test = function(v) {
trace(v)
}

iLoveYou
13.01.2003, 18:28
Оригинал написал(а) ish
ну нокс взял и все испортил :) я ж было приготовил цельную лекцию на тему )
Интересно было бы послушать :)

[subway]design
13.01.2003, 21:30
:) Да, смеюсь. Понятия об инкапсуляции во флэше просто нет. Не говорю уже о невозможности объявления переменных, как public и private, впрочем, флэшерам это не нужно :)

sergwizard
14.01.2003, 05:12
Ну, вы - блин - и флудеры. Судя по вопросу, splash совсем новичок, а вы ему мозги запудриваете. А более понятно для него никто не ответил.

x = 12.49378434389;
y = 2.34352
N = 2; //Количество знаков после запятой.
//Хотим вычислить результат x/y с точностью до N знаков после запятой.
k = Math.pow(10, N);
z = Math.round(x/y*k)/k;
trace(z) //Результат 5.33

Dendroid
14.01.2003, 05:39
x = 12.49378434389;
N = 2; //может быть <0 :)
trace(Number(String(x).substr(0,String(x).indexOf(".")+N+1)))

:)

Dendroid
14.01.2003, 05:46
вот и Number, кстати, пригодился :)

Dendroid
14.01.2003, 05:50
Number(String(x).substr(0,String(x).indexOf(".")+N+(n>=0)))
вот так совсем хорошо...

Nox Noctis
14.01.2003, 05:53
короче, склифасовский...

например:

чтобы получить данное дробное число с точность три знака,
тебе нужно округлить _до целого_ число в 1000 раз большее,
и получившееся поделить на 1000 ...

все просто :)))

остальные степени десятки точно так же =)

splash
14.01.2003, 11:35
Всем спасибо за обсуждение моего вопроса. Думаю ответы пригодятся всем новичкам.

По вопросу о функции Number():

Я понял так, что Number() делает число объектом, а до этого нельзя применять свойства к числу, например:

trace ( Number(5).toString() ); // 5
trace ( 5.toString() ); // error

Max N Chubin_
14.01.2003, 14:17
Ребзя есть еще проще решение...

t=123.456;
des=Math.round(t/10)*10; // до десятков
sot=Math.round(t/100)*100; // до сотен

des=Math.round(t*10)/10; // до десятых
sot=Math.round(t*100)/100; // до сотых

то что написал
Nox Noctis

надо быть проще!
;)

ф-ция Number() конвертирует строку в число, т.е. меняет тип переменной. Например:
t="12";
i=34;
summa=t+i;
summa=1234;
происходит автоматическое преобразование типа переменной i в строку, потому что первый операнд СТРОКА

t="12";
i=34;
summa=Number(t)+i;
summa=46;
в данном примере Number() преобразует строку в число

ish
14.01.2003, 14:37
Оригинал написал(а) [subway]design
:) Да, смеюсь. Понятия об инкапсуляции во флэше просто нет. Не говорю уже о невозможности объявления переменных, как public и private, впрочем, флэшерам это не нужно :)

ну почему же... для этого можно использовать ASSetPropFlags

Max N Chubin_
14.01.2003, 15:12
а можно поподробнее о ASSetPropFlags?
если есть ссылка почитать, буду очень благада!
:confused:

Nox Noctis
14.01.2003, 15:28
макс, все уже украдено до нас.... :))

http://chattyfig.figleaf.com/flashcoders-wiki/index.php?ASSetPropFlags

Max N Chubin_
14.01.2003, 15:36
не поверишь - Первый раз слышу!
;)

lexass
14.01.2003, 16:11
а забей ради прикола в поиск
"ASSetPropFlags"

вроде год назад енто было первый раз...

ооо, нашел

15-03-2002 19:10
Дениска
"редиска"
;)