Lua中的数字增加 - 避免负值

时间:2016-03-30 12:09:00

标签: math lua addition negative-number

这不是硬核数学,但我找不到正确的功能,以便顺利完成。

假设我有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这样的东西,如果我没有完全错误的话就这样做了。

如果有人能回答,那将是非常令人沮丧的。我知道它是一个基本问题,但我只是想通过数学来弄清楚(用聪明的方式)。功能

我在Lua编码:http://lua-users.org/wiki/MathLibraryTutorial

4 个答案:

答案 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建议并使用...参数。