2016-03-30 37 views
1

Bu, sert matematik değildir, ancak bunu düzgün bir şekilde yapmak için doğru işlevi bulamıyorum.Lua'ya sayı eklenmesi - negatif değerlerden kaçınılması

3 değerlerim olduğunu söyleyebiliriz. Maliyet1 Maliyet2 Maliyeti3. Her birinin bir değeri var, onları son bir sayıya toplamı eklemek istiyorum, 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 

ben gibi bir şey gördük biliyoruz (X * Math.Floor * 100) sadece bunun için/100, im tamamen yanlış değil.

Eğer birileri cevap verebilirse çok daha fazla tahmin edilebilir. Onun temel bir sorusu olduğunu biliyorum, ancak Math ile nasıl akıllı bir şekilde olduğunu anlayabiliyorum. fonksiyonlar. Lua

Im kodlama: Eğer İngilizce yerine Lua söylediklerini http://lua-users.org/wiki/MathLibraryTutorial

cevap

1

Hemen aynen yazın:

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

Ayrıca, "parça" için "işlevler" veya diğer parçacıklara bakmayın. Programlama bir bulmaca değildir. En azından insan terimlerinde tam olarak ne yazdığınızı anlamaya çalışın. Örneğin, https://en.wikipedia.org/wiki/Floor_and_ceiling_functions'ın negatif değerleri nasıl kasıp kavramayacağıyla ilgili en ufak bir ilişki bile göremiyorum. –

2

en düz İleri yolu bir sayı olup olmadığını test etmek if ifadeleri kullanmaktır negatif.

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 

ifade v > 0 and v or 0v > 0 doğru v ise bir değere, 0 aksi var

Bu

başka bir yoludur.

0

Sadece böyle bir şey yapabilirsiniz:

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) 

güzel yolu negatif olmayan değerler

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 

herhangi için yapabilir Bu şekilde özetliyor bir işlevi uygulamak olacaktır değer sayısı.

Değerleri bir tabloya almadan girmeyi tercih ederseniz, Yu Hao'nun önerdiğini ve argümanını kullandığını yapabilirsiniz.

3

Muhtemelen bunu yapmanın en kısa yolu math.max(x,0). Yani ifadesi olacaktır:

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

Tabii ki, aynı zamanda bunun dışında bir işlev yapabilir - ve varmalıydın, bir tek astar fazla kullanmak gidiyoruz.