如何在Java中将整数向下取整?

22
我想在Java中将整数向下舍入到最接近的1000。
例如:
  • 13,623 舍入为 13,000
  • 18,999 舍入为 18,000
  • 等等

7
您是指向下取整还是直接舍去小数?当数字可能为负数时,两者是有区别的。 - Mark Byers
实际上我的意思是向下取整,所以我只需要处理千位数,例如43,844向下取整为43,000(而不是44,000)。 - Redandwhite
3个回答

54

将数值除以1000即可舍去你不感兴趣的数字,并乘以1000:

i = i/1000 * 1000

或者,你也可以尝试:

i = i - (i % 1000)

1
+1:我从未想过要这样使用模数。此外,您可以通过执行“i -= i%1000”轻微缩短该行(不知道右侧是否需要括号)。 - Powerlord
真的吗?我一直认为模运算是获取数字单位(例如 i % 10)的一种方法。 至于缩短版本 - 那可能是我在我的代码中要做的事情,但我希望在这里清楚明确。 - abyx
1
@jasons,请检查原帖的描述,他想要这种行为(基本上是想要“整千数”)。 - abyx
OP没有为负数指定行为。当被问及向下取整或向零取整时,他说“实际上我是指向下取整”,但并不是特别清楚。 - Jason S

12

您可以将该数字除以1000,应用Math.floor函数,再乘以1000并转换为整数。


1
int i = Math.floorDiv(-13623, 1000) * 1000 
//i => -14000

上面的代码总是向下取整(向负无穷方向),假设除数(在示例中为1000)为正数。
另一个答案(i = i/1000 * 1000)在i为正数时向下取整,在i为负数时向上取整。
-13623 / 1000 * 1000 == -13000

还有一个适用于long类型的Math.floorDiv版本,可处理非常大的数字,在double精度可能导致Math.floor方法失败的情况下使用。

还有与floorDiv一起使用的Math.floorMod方法,可以帮助您缩短代码:

int i = -13623;
i -= Math.floorMod(i, 1000);
//i => -14000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接