获取范围中给定数字的最小值和范围最小值/最大值增量



我有一个以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

如果你能把这些数字中的每一个都四舍五入,你会分别得到012。然后,您可以将这些数字分别乘以80,得到080160

那么,你究竟是如何做到"四舍五入"的呢?您使用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,因为向下取整就像"铺地板"一样,向上取整就像是"天花板"一样。

最新更新