当您使用/
带有两个int
参数的除法运算符时,它将返回一个int
表示截断结果的值。
您可以在不使用浮点数的情况下获得四舍五入的除法,如下所示:
int a;
int den = 16;
int b = (a + den - 1) / den;
这会给你你所期望的:
a ∈ [0], b = 0 / 16 = 0,
a ∈ [1, 16], b = [16, 31] / 16 = 1,
a ∈ [17, 32], b = [32, 47] / 16 = 2,
a ∈ [33, 48], b = [48, 63] / 16 = 3,
a ∈ [49, 64], b = [64, 79] / 16 = 4,
...
请注意,这仅在a
和b
是肯定的情况下才有效,并注意a + den
. 如果a + den
怀疑可能溢出,则可以使用此表达式的另一个版本:
int b = (a - 1) / den + 1;
唯一的缺点是它会1
在a = 0
. 如果这是一个问题,您可以添加如下内容:
int b = (a - 1) / den + 1 - !a;
请注意,您还可以以相同的方式处理负值a
(从零舍入):
int b = (a > 0) ? (a - 1) / den + 1 : (a - den + 1) / den;