Math Lua中的数字加法-避免负值
这不是硬核的数学,但我就是找不到正确的函数,使它在一个顺利的方式 假设我有3个值。成本1成本2成本3。每个都有一个值,我想把它们加在一起,形成一个最终的数字,TotalCostMath 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
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)
当然,您也可以用它生成一个函数——如果您要将它用于多个一行程序,您可能应该这样做。此外,请不要寻找函数或其他片段来拼凑。编程不是一个难题。试着理解你到底在写些什么,至少是用人类的语言。例如,我不知道哪怕是最细微的关系如何与钳制负值相关。另外,请不要寻找函数或其他片段来拼凑。编程不是一个难题。试着理解你到底在写些什么,至少是用人类的语言。例如,我甚至想不出哪怕是最细微的关系如何与钳制负值相关。