我想把我得到的每一双。我搜索并找到了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
我该怎么办?
答案 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));