如何围捕一双

时间:2015-09-25 13:07:04

标签: java

我想把我得到的每一双。我搜索并找到了Math.ceil,但它没有像我预期的那样工作。例如:

Log.v("this", "" + Math.ceil(300 / 1000));-->returns 0 - expected 1 
Log.v("this",""+Math.ceil(100 / 1000));-->returns 0 - expected 1 
Log.v("this",""+Math.ceil(50 / 1000));-->returns 0 - expected 1 
Log.v("this",""+Math.ceil(700 / 1000));-->returns 0 - expected 1 
Log.v("this",""+Math.ceil(1000 / 1000)); -->this is ok
Log.v("this",""+Math.ceil(1020 / 1000));-->returns 1 - expected 2 

我该怎么办?

2 个答案:

答案 0 :(得分:7)

你不是四舍五入,你是整数整数!

当你这样做时

700 / 1000

你正在进行整数除法(因为两边都是整数!)

System.out.println(700/1000) == 0 //Well, you know what i mean.

你需要有一个双倍,所以你需要将双方中的一方提升到更高的数字(int - > double),这样这个分区现在是双打的:

700 / (double) 1000 == 0.7

然后天花板将正常工作。

答案 1 :(得分:0)

当你从两个整数开始并希望得到一个整数时,最好不要通过浮点数学来做到这一点:

public static int integerDivideRoundUp(int numerator, int denominator)
{
    int q = numerator / denominator;
    int r = numerator % denominator;
    return r == 0 ? q : q + 1;
}

即。如果除法中没有余数,则返回整数除法结果,否则返回一个。

这是一个基于this answer的无分支verison:

public static int integerDivideRoundUp(int numerator, int denominator)
{
    int q = numerator / denominator;
    int r = numerator % denominator;
    return q - (-r >> (Integer.SIZE - 1));
}

用法:

Log.v("this", "" + integerDivideRoundUp(300, 1000));