Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math Lua中的数字加法-避免负值_Math_Lua_Addition_Negative Number - Fatal编程技术网

Math Lua中的数字加法-避免负值

Math Lua中的数字加法-避免负值,math,lua,addition,negative-number,Math,Lua,Addition,Negative Number,这不是硬核的数学,但我就是找不到正确的函数,使它在一个顺利的方式 假设我有3个值。成本1成本2成本3。每个都有一个值,我想把它们加在一起,形成一个最终的数字,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+Cos

这不是硬核的数学,但我就是找不到正确的函数,使它在一个顺利的方式

假设我有3个值。成本1成本2成本3。每个都有一个值,我想把它们加在一起,形成一个最终的数字,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编码:

只需准确地写下你用Lua所说的,而不是用英语:

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

只需准确地用Lua而不是英语写下你所说的话:

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

最直接的方法是使用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,如果v>0为真,则v或0的值为v,否则为0。

最直接的方法是使用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,如果v>0为真,则v或0的值为v,否则为0。

您可以简单地执行以下操作:

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的建议执行,并使用。。。参数。

您可以简单地执行以下操作:

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的建议执行,并使用。。。参数。

实现这一点的最短方法可能是math.maxx,0。所以你的表达是:

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

当然,你也可以用它来做一个函数——如果你想用它来做多个线性函数,你可能应该这样做。

最短的方法可能是math.maxx,0。所以你的表达是:

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

当然,您也可以用它生成一个函数——如果您要将它用于多个一行程序,您可能应该这样做。

此外,请不要寻找函数或其他片段来拼凑。编程不是一个难题。试着理解你到底在写些什么,至少是用人类的语言。例如,我不知道哪怕是最细微的关系如何与钳制负值相关。另外,请不要寻找函数或其他片段来拼凑。编程不是一个难题。试着理解你到底在写些什么,至少是用人类的语言。例如,我甚至想不出哪怕是最细微的关系如何与钳制负值相关。