如何划分浮点数并将结果转换为Android中的整数

时间:2013-08-09 08:33:12

标签: android casting integer


问题

假设int childCount = linearLayout.getChildCount()返回的数字是三加一的倍数,例如471013 ....

我想向childCount添加两个并将其除以三,以获得我的列表编号所需的结果,例如(7 + 2) / 3应该给出3的答案,但我不知道它是2还是4只是因为执行float操作时的错误。所以我这样做是为了确保得到3作为结果:

int numberOfCells = (int) ((linearLayout.getChildCount() + 2) / 3 + 0.5f);

这是对的吗?


更新

因为在每个相对布局(也是线性布局的子项)后面的线性布局中有两个子视图(线)。但是最后一个相对布局没有后续行。所以我想得到相对布局的数量,也就是我将要制作的列表单元格的数量。


更新2

是那个声明吗,

int numberOfCells = (int) ((linearLayout.getChildCount() + 2) / 3 + 0.5f);

相当于

int numberOfCells = (int) Math.floor((linearLayout.getChildCount() + 2) / 3 + 0.5f);

1 个答案:

答案 0 :(得分:2)

  

是那个声明吗,

     

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+ve integer将导致 0.5f + x.5f (其中x是一些+ ve整数)。

因此,(linearLayout.getChildCount()+ 2)/ 3 + 0.5f 的结果将是(0.5f或+ x.5f)

现在,在first equation的情况下,我们有:(int)(0.5f或+ x.5f)。将floatdouble转换为int会返回float或double的整数部分。

第一个等式的可能结果:(0或+ x)

对于second equation,我们有:(int)Math.floor(0.5f或+ x.5f)Math.floor(double)返回小于或等于参数的最正整数值。因此, Math.floor(0.5f或+ x.5f)将为:(closest +ve integer less than 0.5f) = 0.0(closest +ve integer less than +x.5f) = +x.0。将它们转换为int将导致(0或+ x)。

第二个等式的可能结果:(0或+ 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;
}