整数除法的向上取整技巧

neededDiamonds := (shortage + rate - 1) / rate

这是一个整数除法的向上取整技巧,让我用例子来说明:

假设缺少的资源(shortage)是1500个生肉,兑换比例(rate)是2000(即1钻石=2000生肉):

正常除法:1500 ÷ 2000 = 0.75钻石
整数除法:1500 / 2000 = 0(因为Go语言中整数除法会舍弃小数部分)
向上取整公式:(1500 + 2000 - 1) / 2000 = 3499 / 2000 = 1
再举一个例子,如果缺少2001个生肉:

正常除法:2001 ÷ 2000 = 1.0005钻石
整数除法:2001 / 2000 = 1
向上取整公式:(2001 + 2000 - 1) / 2000 = 4000 / 2000 = 2
这个公式的原理是:

如果shortage正好是rate的整数倍,结果就是整除的结果
如果shortage不是rate的整数倍,结果会比整除多1,实现了向上取整