2016-03-30 12 views
1

Dies ist keine hardcore Mathematik, aber ich kann einfach nicht die richtige Funktion finden, um dies auf eine glatte Art und Weise zu machen.Anzahl Addition in Lua - Vermeidung negativer Werte

Sagen wir, ich habe 3 Werte. Kosten1 Kosten2 Kosten3. Jeder hat einen Wert, ich möchte sie zusammen in eine endgültige Zahl, TotalCost hinzufügen.

Cost1+Cost2+Cost3 = TotalCost 

Problem is, if any of Cost1/2/3 is negative, I want to make that a ZERO, ie; 

Cost1 = -100 
Cost2 = 50 
Cost3 = 150 

Cost1+Cost2+Cost3 = TotalCost 
equals 
0 + 50 + 150 = 200 

Ich weiß, dass ich mit so etwas gesehen (X * Math.Floor * 100)/100, zu tun, nur dieser, wenn im nicht völlig falsch.

Würde sehr geschätzt, wenn jemand antworten könnte. Ich weiß, es ist eine grundlegende Frage, aber ich kann einfach herausfinden, wie (mit einem schlauen Weg das ist) mit der Mathematik. Funktionen.

Im Codierung in Lua: http://lua-users.org/wiki/MathLibraryTutorial

Antwort

1

Nur genau schreiben, was Sie in Lua sagte statt Englisch:

(Cost1 > 0 and Cost1 or 0) + (Cost2 > 0 and Cost2 or 0) + (Cost3 > 0 and Cost3 or 0) 
+0

Bitte suchen Sie auch nicht nach "Funktionen" oder anderen Schnipsel zum "Zusammenfügen". Programmierung ist kein Puzzle. Versuchen Sie zu verstehen, was genau Sie in menschlichen Begriffen mindestens schreiben. Zum Beispiel kann ich nicht einmal die geringste Beziehung feststellen, wie https://en.wikipedia.org/wiki/Floor_and_ceiling_functions mit negativen Werten verbunden werden kann. –

2

Die geradlinige Art und Weise ist if Aussagen zu verwenden, um zu testen, ob eine Zahl ist Negativ.

Dies ist ein weiterer Weg:

function my_sum(...) 
    sum = 0 
    for k, v in ipairs{...} do 
    sum = sum + (v > 0 and v or 0) 
    end 
    return sum 
end 

print(my_sum(-50, 50, 100)) -- 150 

Der Ausdruck v > 0 and v or 0 hat einen Wert von v wenn v > 0 wahr ist, 0 anders.

0

Sie können einfach etwas tun:

local value1 = 100 
local value2 = -200 
local value3 = 200 

local value4 = (value1 > 0 and value1 or 0) + (value2 > 0 and value2 or 0) + (value3 > 0 and value3 or 0) 

Der schönste Weg, um eine Funktion zu implementieren wäre, die nicht-negative Werte aufsummiert

function sumOfPositives(tableOfValues) 

    local sum = 0 

    for i,v in ipairs(tableOfValues) do 
    sum = sum + v > 0 and v or 0 
    end 
    return sum 

end 

Auf diese Weise können sie für jede tun können Anzahl der Werte.

Wenn Sie es vorziehen, einfach die Werte einzugeben, ohne sie in einer Tabelle zu haben, können Sie tun, was Yu Hao vorgeschlagen hat, und das Argument ... verwenden.

3

Möglicherweise ist der kürzeste Weg dies zu tun math.max(x,0). Also Ihr Ausdruck wäre:

math.max(Cost1,0) + math.max(Cost2,0) + math.max(Cost3,0) 

Natürlich könnten Sie auch eine Funktion daraus machen - und Sie wahrscheinlich sollte, wenn du gehst, es zu benutzen mehr als ein Einzeiler.