上限四舍五入为 60 的倍数 Java
Ceiling rounded to multiple of 60 Java
在提问之前,我想让大家知道,我确实在过去的帖子中看到了一些类似的问题,但在应用时,不会像预期的那样工作......
所以基本上,我想将一个整数四舍五入到 60 的倍数。
例如,如果我要取整的数字是 160 到 60 的倍数,那么结果应该是 180; (因为 out of 60->120->180;160 比 120 更接近 180);
我的测试代码如下所示:
public static void main (String[] args) {
double a = Math.ceil(160/60)*60;
System.out.println(a);
}
它给出的输出是120.0;而不是 180.
测试代码产生 120 而不是 180 到底有什么问题?
我是不是用错了 ceil()?
您正在使用整数除法,结果是整数。因此,正如其他人指出的那样:160/60 returns 2,而不是您希望四舍五入为 3 的 2,66。
public static void main (String[] args) {
double a = Math.ceil((float)160/60)*60;
System.out.println(a);
}
因为你的输入是一个整数而且你的输出也是一个整数,
实现你自己的天花板功能会更干净:
int ceil(int num, int mod) {
int remainder = num % mod;
if (remainder < mod / 2) {
return num - remainder;
}
return num - remainder + mod;
}
例如,这将给出:
- 180 对于 (160, 60) 和 (150, 60)
- 120 代表 (149, 60)
在提问之前,我想让大家知道,我确实在过去的帖子中看到了一些类似的问题,但在应用时,不会像预期的那样工作...... 所以基本上,我想将一个整数四舍五入到 60 的倍数。 例如,如果我要取整的数字是 160 到 60 的倍数,那么结果应该是 180; (因为 out of 60->120->180;160 比 120 更接近 180); 我的测试代码如下所示:
public static void main (String[] args) {
double a = Math.ceil(160/60)*60;
System.out.println(a);
}
它给出的输出是120.0;而不是 180.
测试代码产生 120 而不是 180 到底有什么问题? 我是不是用错了 ceil()?
您正在使用整数除法,结果是整数。因此,正如其他人指出的那样:160/60 returns 2,而不是您希望四舍五入为 3 的 2,66。
public static void main (String[] args) {
double a = Math.ceil((float)160/60)*60;
System.out.println(a);
}
因为你的输入是一个整数而且你的输出也是一个整数, 实现你自己的天花板功能会更干净:
int ceil(int num, int mod) {
int remainder = num % mod;
if (remainder < mod / 2) {
return num - remainder;
}
return num - remainder + mod;
}
例如,这将给出:
- 180 对于 (160, 60) 和 (150, 60)
- 120 代表 (149, 60)