PDA

Просмотр полной версии : как увеличить значение переменной не меняя знак?


skald
03.10.2008, 02:01
собственно, вот и вопрос ..
наверно оч просто ...
как увеличить значение переменной не меняя знак?

darksranger
03.10.2008, 02:49
какой знак ?

увеличение

var i:number = 0
trace(i) // 0
i++
trace(i) //1
i+=10
trace(i) //11

Obi
03.10.2008, 15:32
собственно, вот и вопрос ..
наверно оч просто ...
как увеличить значение переменной не меняя знак?

var *= 2 ?

skald
03.10.2008, 18:12
не, ну я отсталый, но не настолько)))))

понятно, что умножение не влияет на знак ...
а меня интересует следубщее, ...

переменная увеличивается сначала в плюс, потом в минус. и я хотел узнать есть ли оператор, способный осуществить увеличение значения ... к примеру на 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: Волгоградец, делить на ноль плохо (:

musat
03.10.2008, 18:43
При -n-10 это не увеличение, а уменьшение)

skald
03.10.2008, 18:54
2Волгоградец
спасибо ))) я похожий вариант тоже думал и пока он был наилучшим)))
2Division
спасибо, буду разбираться с возвращением значения ))) до этого еще не сталкивался )))

skald
03.10.2008, 20:04
2Division
можно один коментарий )))


if (!num) return 0;
return num>0?1:-1;


эта проверка (!num) для того, чтобы убедиться, что у n есть значение??

Division
03.10.2008, 20:15
Ну можно было бы написать

if (num==0) return 0;

Если ноль - возвращаем ноль. Если тебя нужно иначе, исправь (:

Wolsh
05.10.2008, 00:54
Хм. А зачем огород городить? Почему не создать функцию, возвращающую сразу то что надо, без промежуточных вычислений
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)

Wolsh
05.10.2008, 02:56
не знал, что num == 0 и num, не переданная в функцию, - это !num (т.е. одно и то же). Как так? При переводе числа в булево значение только 0 преобразуется в false, а положительное или отрицательное число - в true.