Просмотр полной версии : как увеличить значение переменной не меняя знак?
собственно, вот и вопрос ..
наверно оч просто ...
как увеличить значение переменной не меняя знак?
darksranger
03.10.2008, 02:49
какой знак ?
увеличение
var i:number = 0
trace(i) // 0
i++
trace(i) //1
i+=10
trace(i) //11
собственно, вот и вопрос ..
наверно оч просто ...
как увеличить значение переменной не меняя знак?
var *= 2 ?
не, ну я отсталый, но не настолько)))))
понятно, что умножение не влияет на знак ...
а меня интересует следубщее, ...
переменная увеличивается сначала в плюс, потом в минус. и я хотел узнать есть ли оператор, способный осуществить увеличение значения ... к примеру на 10.
если значение переменной -n, то -n-10, а если +n, то +n+10
проверять знак if-ом мне ненравится.
если такого оператора нет, то как можно выковырять знак в виде -1 или +1
мне пришла в голову тема, разделить на число >> чем значение переменной, а потом округлить, тогда остается знак, НО не нашел нужного механизма округления. (если в большую, то получается 1 или 0, а если в меньшую, то -1 или 0)
Волгоградец
03.10.2008, 18:19
(Math.abs(n) + 10) * Math.abs(n)/n
Division
03.10.2008, 18:26
ИМХО человеческий вариант это написать функцию, которая возвращает знак.
function Sign(num) {
if (!num) return 0;
return num>0?1:-1;
}
n+=Sign(n)*10;
UPD: Волгоградец, делить на ноль плохо (:
При -n-10 это не увеличение, а уменьшение)
2Волгоградец
спасибо ))) я похожий вариант тоже думал и пока он был наилучшим)))
2Division
спасибо, буду разбираться с возвращением значения ))) до этого еще не сталкивался )))
2Division
можно один коментарий )))
if (!num) return 0;
return num>0?1:-1;
эта проверка (!num) для того, чтобы убедиться, что у n есть значение??
Division
03.10.2008, 20:15
Ну можно было бы написать
if (num==0) return 0;
Если ноль - возвращаем ноль. Если тебя нужно иначе, исправь (:
Хм. А зачем огород городить? Почему не создать функцию, возвращающую сразу то что надо, без промежуточных вычислений
function inc(variable:Number, delta:Number):Number
{
return !variable ? 0 : variable>0 ? variable+delta : variable-delta;
}
//// проверка
trace(inc(-500, 20));
trace(inc(500, 20));
trace(inc(-500, -20));
trace(inc(500, -20));
//// usage: n = inc(n, 10)
orcpochta
05.10.2008, 01:44
ИМХО человеческий вариант это написать функцию, которая возвращает знак.
function Sign(num) {
if (!num) return 0;
return num>0?1:-1;
}
n+=Sign(n)*10;
не знал, что num == 0 и num, не переданная в функцию, - это !num (т.е. одно и то же). Как так?
Fernando Costa
05.10.2008, 01:53
trace(!undefined)
не знал, что num == 0 и num, не переданная в функцию, - это !num (т.е. одно и то же). Как так? При переводе числа в булево значение только 0 преобразуется в false, а положительное или отрицательное число - в true.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.