获取范围内给定范围内的最小值,范围最小/最大增量

时间:2018-08-05 07:42:25

标签: math lua range max min

我有一个以80为步长递增的范围。例如,min_1=0 max_1=80, min_2=80 max_2=160等。现在我有一个数字,对于第一种情况为n_1 = 47,对于第二种情况为n_2 = 111 。对于这两种情况,每个数字都落在单独的递增范围内。是否有一种简单的方法来计算每个数字的范围的最小值?对于第一种情况,范围的最小值为0,对于第二种情况,范围的最小值为80

很抱歉,这很简单,但是我很难弄清楚。感谢您的任何帮助!另外,如果有人要输入答案,我会使用Lua,但这没关系。

2 个答案:

答案 0 :(得分:1)

使用integer modulo运算符的解决方案:

 low_end_of_range = value - (value % 80)

可用(不确定Lua),也可以使用integer divisiondiv, //)运算符:

 low_end_of_range = (value div 80) * 80

答案 1 :(得分:1)

编辑:请查看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是因为四舍五入就像是对数字“加注”,而四舍五入就像是对数字进行“上限”。