【发布时间】:2010-06-16 22:30:44
【问题描述】:
我正在尝试构建一个很小(或者可能不是那么小)的公式,该公式将包含一组最小值和最大值之间的数字,但也会循环这些数字,这样如果它们超出范围,它们就不会被剪裁。到目前为止,这就是我所拥有的。
min1 = 10
max1 = 90
val1 = 92
//will make 11, which is what i want since it loops
formula: min(max(min1,min(val1,max1)),mod(val1,max1)+min1)
但是,我希望它也循环另一个方向,这样如果 val1 为 5,即 min1 之外的 -5,它将变为 86。
我遇到的另一个问题是
max1 % max1 != max1
如我所愿,因为最大值是范围的一部分
为了清楚起见,这里有一些基于循环范围的期望输出示例
min1 = 10
max1 = 90
----------------------------------------------
val1 = 30 //within range: stays as 30
val1 = 90 //within range: stays as 90
val1 = -6 //below range: loops to becomes 75
val1 = 98 //above range: loops to becomes 17
val1 = 91 //above range: loops to becomes 10
我不想诉诸于使用一系列 if/else 语句,但如果它是绝对需要的,一个就可以了。这有可能吗?
【问题讨论】:
-
我认为您的最后一个示例应该是 17,而不是 18,因为您也应该数 10。不是吗?你真的希望 91 是 11 而不是 10 而 90 是 90?
-
在您的示例中,90 是否保持 90 和 91 变为 11?那么没有什么变成10了吗? 170应该怎么办?变成90还是10?这是相当奇怪的“循环”。另外,-6怎么会变成84? -6 是 16 个数字,与最小值相差甚远,所以它应该在 90-16=74 左右,还是什么?
-
哦..哈...是的,我完全写错了。 -6 应该是 74,而不是 84。抱歉。
-
回复:Mehrdad Afshari。老实说,我不知道我在写这篇文章时在想什么。你是绝对正确的。 91 应该是 10 以形成正确的循环。 9 应该是 90,8 是 89。我真的很抱歉,伙计们,我一直在向你发送错误的方向。