数值加法(溢出)

我又来了。没错,我又干了一些新手错误。哈。

我想知道有没有一种方法可以做到这一点,因为我的尝试并不顺利,我需要从比我更能解决问题的人那里得到帮助。

我希望有这样一个函数:

local function numberAddWithinRange(numberStart, add, min, max)
    local x;numberStart = numberStart + add;

    if numberStart<min then
        x = min + (numberStart*(numberStart>0 and -1 or 1)); -- - numberStart;
        return numberAddWithinRange(max, -x, min, max);
    elseif numberStart>max then
        x = min + (numberStart*(numberStart>0 and -1 or 1));-- - numberStart;
        print("X is:", x);
        return numberAddWithinRange(min, x, min, max);
    else
        x = numberStart;
    end;
    return x;

end;

这个函数还行,但是它不能完全实现我的要求。

你们看,我所想要的是,当我将245加到20时,范围为25到50时,它会一遍又一遍地添加,从25 -> 50,从25 -> 50,直到使用了所有“溢出”的数字,然后返回剩余的数字。(如果max == 50,那么51就变成了26,然后继续添加,等等)

然而,我的函数似乎做不到正确的事情,无论是晚上还是白天,我都不知道如何修复它。

关于“after2”,它应该等于“startNum”,但它却没有。

local startNum = 200;
local after = numberAddWithinRange(startNum, 400, 33, 127);
local after2 = numberAddWithinRange(after, -400, 33, 127);
print(after, after2, after2==startNum)

我在Google和stackoverflow上搜索过,没有找到任何帮助我解决问题的东西。 我可能只是太蠢了...但希望有人能帮助我。

我也知道我可以这样做:

local gn = function(num, add, min, max)
    for i=add<0 and -1 or 1, add do
        num = num + (1 * (add<0 and -1 or 1));
        if num > max then
            num = min;
        elseif num < min then
            num = max;
        end;
    end;
    return num;
end;

但是,我认为那样效率很低,所以请更有经验的人帮忙。

点赞