这不是硬核数学,但我找不到正确的功能,以便顺利完成。
假设我有3个值。 Cost1 Cost2 Cost3。每个都有一个值,我想将它们一起添加到最终的数字,TotalCost。
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
我知道我已经看过像(X * Math.Floor * 100)/ 100这样的东西,如果我没有完全错误的话就这样做了。
如果有人能回答,那将是非常令人沮丧的。我知道它是一个基本问题,但我只是想通过数学来弄清楚(用聪明的方式)。功能
答案 0 :(得分:3)
可能最短的方法是math.max(x,0)
。所以你的表达是:
math.max(Cost1,0) + math.max(Cost2,0) + math.max(Cost3,0)
当然,你也可以用它来制作一个功能 - 你可能应该,如果你打算用它来做一个以上的话。
答案 1 :(得分:2)
最直接的方法是使用if
语句来测试数字是否为负数。
这是另一种方式:
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
如果v > 0 and v or 0
为真,则表达式v
的值为v > 0
,否则为0
。
答案 2 :(得分:1)
准确写下你在Lua中所说的而不是英语:
(Cost1 > 0 and Cost1 or 0) + (Cost2 > 0 and Cost2 or 0) + (Cost3 > 0 and Cost3 or 0)
答案 3 :(得分:1)
您可以简单地执行以下操作:
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)
最好的方法是实现一个总结非负值的函数
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
这样你可以为任意数量的值做到这一点。
如果您只想输入值而不将它们放在表中,您可以执行Yu Hao建议并使用...参数。