计算按小时的现金,8小时内每小时3美元,超过8小时每小时增加5美元。不使用“if”。

如标题所述,我想在 Lua 上使用数学函数来计算: 如果一个人工作 8 小时,他每小时得到 3 美元的报酬。 在超过 8 小时的任何额外时间,他每小时得到 5 美元的报酬。

只能使用 math.abs 和 math.floor 函数。不使用 if 语句。这对我来说是一个挑战,我失败了,希望你可以做到 :)

点赞
用户1190388
用户1190388

假设工作小时数的变量为 h。那么,您有以下内容:

cash = h * 3 + (h <= 8 and 0 or (h - 8) * 2)
2015-10-08 18:03:37
用户7632578
用户7632578

我在这个函数中的所有逻辑中使用了math.floor(hours/8.1)。我是通过使用这个魔幻数字来乘以基于逻辑的数字的方式来实现的,这将评估为0(如果工作时间小于8.1小时),或1(如果工作时间为8.1小时或更长时间)。当然,如果您使用超过16小时的工作时间,它将开始以2倍的时间计算加班费用,但如果您工作了16个小时,您可能应该得到双倍的加班费 ;)

我使用8.1而不是8,这样逻辑就不会在8小时的工作日触发,只会在8小时以上的工作日上触发。其余代码都很简单(只是尝试忽略我过多使用括号)

function calculatePay(hours)
  return (3*hours)+((2*math.floor(hours/8.1))*((hours-8)*math.floor(hours/8.1)))
end

print(calculatePay(6)) -- 6*3是18元的常规工资,没有加班费
print(calculatePay(8)) -- 8*3是24元的常规工资,没有加班费
print(calculatePay(10)) -- 10*3是30元的常规工资,加4元(2*2)的加班费
print(calculatePay(12)) -- 12*3是36元的常规工资,加8元(4*2)的加班费
2017-02-28 00:27:50