是那种说法,
int numberOfCells = (int) ((linearLayout.getChildCount() + 2) / 3 + 0.5f);
相当于
int numberOfCells = (int) Math.floor((linearLayout.getChildCount() + 2) / 3 + 0.5f);
是的。
推理:
两个方程的共同部分是:
(linearLayout.getChildCount() + 2) / 3 + 0.5f
让我们评估一下所有可能的结果。
此处:linearLayout.getChildCount() + 2将始终为+ve integer
. (linearLayout.getChildCount() + 2) / 3将评估为zero
(当linearLayout.getChildCount()
返回zero
) 或+ve integer
. 将0.5f添加到zero
或 a+ve integer
将导致0.5f或+x.5f(其中x
是一些 +ve 整数)。
因此,(linearLayout.getChildCount() + 2) / 3 + 0.5f的结果将是(0.5f or +x.5f)。
现在,在 的情况下first equation
,我们有:(int)(0.5f or +x.5f)。将 afloat
或 adouble
转换为 anint
返回 float 或 double 的整数部分。
第一个方程的可能结果:(0 or +x)。
对于second equation
,我们有:(int) Math.floor(0.5f or +x.5f)。Math.floor(double)
返回小于或等于参数的最大正整数值。因此,Math.floor(0.5f or +x.5f)将是:(closest +ve integer less than 0.5f) = 0.0
OR (closest +ve integer less than +x.5f) = +x.0
。将它们转换为int
将导致(0 或 +x)。
第二个等式的可能结果:(0 or +x)。
两个方程的计算结果相同。因此,它们是等价的。
如何使用remainder
?例如,假设:
int remainder = (linearLayout.getChildCount()) % 3;
int numberOfCells;
switch (remainder) {
case 1:
// linearLayout.getChildCount() returned 1, 4, 7, 10......
numberOfCells = (linearLayout.getChildCount() + 2) / 3;
break;
case 2:
// linearLayout.getChildCount() returned 2, 5, 8, 11......
numberOfCells = (linearLayout.getChildCount() + 1) / 3;
break;
default:
// linearLayout.getChildCount() returned a (+ve) multiple of 3......
numberOfCells = (linearLayout.getChildCount()) / 3;
break;
}