我有一个以80为步长递增的范围。例如,min_1=0 max_1=80, min_2=80 max_2=160
等等。现在假设我有一个数字,对于情况一是n_1 = 47
,然后对于情况二是n_2 = 111
。对于这两种情况,每个数字都属于单独的递增范围。有没有一种简单的方法来计算每个数字的最小范围?对于情况一,该范围的最小值将是0
,而对于情况二,该最小值将为80
。
如果这很简单,我很抱歉,但我很难弄清楚。谢谢你的帮助!此外,如果有人想在其中键入答案,我会使用Lua,但这无关紧要。
使用integer modulo
运算符的解决方案:
low_end_of_range = value - (value % 80)
可用(不确定Lua(,也可以使用integer division
(div, //
(运算符:
low_end_of_range = (value div 80) * 80
编辑:请看一下MBo的答案。事实上,我认为它的计算成本会更低,因此是一个比这个更好的解决方案
您可以使用math.floor()
函数来执行此操作。让我解释一下。
首先,查看以下计算:
47/80 = 0.5875
111/80 = 1.3875
163/80 = 2.0375
如果你能把这些数字中的每一个都四舍五入,你会分别得到0
、1
和2
。然后,您可以将这些数字分别乘以80
,得到0
、80
和160
。
那么,你究竟是如何做到"四舍五入"的呢?您使用math.floor()
:
number = math.floor(56.87)
print(number) --prints 56
把这些放在一起,你的代码看起来像这样:
number = 111
increment = 80
min_range = math.floor(number/increment) * increment
这实际上是一个常见的问题:例如,如何将一个数字四舍五入到最接近的十分之一或千位?只要以.1
(第十位(或1000
(千位(为增量,就可以找到它的"最小范围"。
你们知道,还有一个函数叫math.ceil()
。它们被称为math.floor()
和math.ceil
,因为向下取整就像"铺地板"一样,向上取整就像是"天花板"一样。