我有一个以80为步长递增的范围。例如,min_1=0 max_1=80, min_2=80 max_2=160
等。现在我有一个数字,对于第一种情况为n_1 = 47
,对于第二种情况为n_2 = 111
。对于这两种情况,每个数字都落在单独的递增范围内。是否有一种简单的方法来计算每个数字的范围的最小值?对于第一种情况,范围的最小值为0
,对于第二种情况,范围的最小值为80
。
很抱歉,这很简单,但是我很难弄清楚。感谢您的任何帮助!另外,如果有人要输入答案,我会使用Lua,但这没关系。
答案 0 :(得分:1)
使用integer modulo
运算符的解决方案:
low_end_of_range = value - (value % 80)
可用(不确定Lua),也可以使用integer division
(div, //
)运算符:
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
如果只需将这些数字四舍五入,您将分别得到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
是因为四舍五入就像是对数字“加注”,而四舍五入就像是对数字进行“上限”。