2009-08-23 6 views
3

Я использовал это на других языках, но lua, похоже, не хватает этой довольно полезной функции.Lua десятичный знак?

Может ли один из вас славных приговоров предоставить мне функцию lua, чтобы получить знак пройденного им номера?

+6

Erm ... если он меньше нуля, он отрицательный? –

ответ

-3

Вы можете проверить на sign, как это:

i = -2 
if i == math.abs(i) then -- or i >= 0 
    print "positive" 
else 
    print "negative" 
end 
+0

Хм. справедливо, спасибо. – 2009-08-23 10:36:09

+2

-1: Почему вы вызываете функцию и выполняете сравнение, когда можете проверить отрицательность с помощью одного оператора сравнения? В Lua я не считаю, что это может потерпеть неудачу, но на других языках это может завершиться неудачно, если i является типом int и math.abs возвращает double, например. Не пишите больше кода, чем необходимо. –

+0

@ Джонатан: Вы имеете в виду, почему вы называете 'math.abs'? В качестве альтернативы я поставил сравнение '> =' в комментарии. Вы можете выбрать все, что захотите. –

12
function math.sign(x) 
    if x<0 then 
    return -1 
    elseif x>0 then 
    return 1 
    else 
    return 0 
    end 
end 
+2

Я бы не стал использовать стандартное пространство имен библиотек. –

+9

Я не думаю, что это смертельный грех. – lhf

+3

IMO, измените его, только если он еще не доступен, и загрязнение пространства имен в порядке: 'math.sign = math.sign или function (x) return x <0 и -1 или x> 0 и 1 или 0 end' (конечно , это зависит от других библиотек, использующих одно и то же поведение, если они определяют одну и ту же функцию) – Deco

7

Только в случае, если кто-нибудь натыкается на этом :, вот мой как-то более короткий вариант:

function sign(x) 
    return x>0 and 1 or x<0 and -1 or 0 
end 
+1

Может использовать некоторые круглые скобки для приоритетных задач, но мне это нравится! – Twisol

3

Я думаю, что идея должен возвращать 1 или -1 для представления положительных или отрицательных. Я не думаю, что вы захотите, чтобы он вернулся 0. Может иметь катастрофические последствия. Представьте себе, пытаясь изменить знак значения путем умножения на знак (х), когда она возвращает 0. Вместо изменения знака вы измените значение на 0.

Я бы придерживаться

function sign(x) 
    return (x<0 and -1) or 1 
end 
-1

Вы также можете получить знак числа, как это:

x/ math.abs(x) 

Я хотел бы использовать только, что один для целых чисел и, поскольку Lua не различает Интс от поплавков, я бы не использовать его в Lua на все.

+3

Это не работает для x = 0. – lhf

Смежные вопросы