2009-08-23 12 views
3

Ich habe das in anderen Sprachen verwendet, aber Lua scheint diese ziemlich nützliche Funktion zu fehlen.Lua Dezimalzeichen?

Könnte einer von euch nette Chuppies mir eine Lua-Funktion geben, um das Zeichen der Nummer zu bekommen?

+6

Erm ... wenn es weniger als Null ist, ist es negativ? –

Antwort

-3

können Sie prüfen, für die sign wie folgt aus:

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

Hmm. Fair genug, danke. –

+2

-1: Warum würden Sie eine Funktion aufrufen und einen Vergleich durchführen, wenn Sie mit einem einzigen Vergleichsoperator nach Negativität suchen können? In Lua glaube ich nicht, dass dies fehlschlagen kann, aber in anderen Sprachen kann dies fehlschlagen, wenn ich den Typ int und math.abs zum Beispiel ein Double zurückgeben kann. Schreibe nicht mehr Code als nötig. –

+0

@ Jonathan: meinst du warum rufen 'math.abs'? Ich habe den Vergleich '> =' in einen Kommentar als Alternative eingefügt. Sie können wählen, was Sie wollen. –

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

Ich würde den Standard-Bibliotheksnamensraum nicht polieren. –

+9

Ich glaube nicht, dass es eine Todsünde ist. – lhf

+3

IMO, ändern Sie es nur gesetzt, wenn nicht bereits verfügbar und Namespace Verschmutzung ist OK: 'math.sign = math.sign oder Funktion (x) zurück x <0 und -1 oder x> 0 und 1 oder 0 Ende '(natürlich , dies beruht auf anderen Bibliotheken, die das gleiche Verhalten verwenden, wenn sie die gleiche Funktion definieren) – Deco

7

Nur falls jemand auf diesen einen stolpert :, hier ist meine irgendwie kürzere Version:

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

Könnte einige Klammern für den Vorrang-herausgefordert verwenden, aber ich mag es! – Twisol

3

Ich denke, die Idee soll 1 oder -1 zurückgeben, um positiv oder negativ darzustellen. Ich glaube nicht, dass Sie wollen, dass es 0 zurückgibt. Das könnte katastrophale Auswirkungen haben. Stellen Sie versuchen, das Zeichen eines Wertes zu ändern, indem sie durch Zeichen Multiplikation (x), wenn es 0. Statt Änderung des Vorzeichens kehren Sie den Wert auf 0

ändern würde ich mit

halten würde
function sign(x) 
    return (x<0 and -1) or 1 
end 
-1

Sie können auch das Vorzeichen einer Zahl wie diese:

x/ math.abs(x) 

ich nur, dass man für ganze Zahlen verwenden würde, und da Lua nicht ints von Schwimmern unterscheiden, würde ich es nicht in Lua verwendet bei alle.

+3

Dies funktioniert nicht für x = 0. – lhf