【发布时间】:2009-11-23 14:38:16
【问题描述】:
我想在 Java 中将整数向下舍入到最接近的 1000。
例如:
- 13,623 轮到 13,000
- 18,999 轮到 18,000
- 等
【问题讨论】:
-
您的意思是向下舍入还是舍入为零?当数字可以为负数时会有所不同。
-
实际上我的意思是向下舍入,所以我只有数千个要处理,即 43,844 舍入到 43,000(不是 44,000)
我想在 Java 中将整数向下舍入到最接近的 1000。
例如:
【问题讨论】:
简单地除以 1000 去掉你不感兴趣的数字,然后乘以 1000:
i = i/1000 * 1000
或者,你也可以试试:
i = i - (i % 1000)
【讨论】:
i -= i % 1000 稍微缩短行(不知道是否需要在右侧加上括号)
i % 10) 等的方法。关于缩短版本 - 这可能是我在代码中所做的,但希望在这里明确。
您可以将数字除以 1000,应用 Math.floor,乘以 1000 并转换回整数。
【讨论】:
int i = Math.floorDiv(-13623, 1000) * 1000
//i => -14000
假设除数(示例中为 1000)为正数,上述代码将始终向下舍入(向负无穷大)。
另一个答案 (i = i/1000 * 1000) 在 i 为肯定时向下取整,但在 i 为否定时向上取整。
-13623 / 1000 * 1000 == -13000
还有一个用于longs 的Math.floorDiv 版本适用于非常大的数字,其中Math.floor 方法可能由于double 的精度而失败。
还有Math.floorMod 方法可以与floorDivs 一起使用,这可能会让您缩短一点:
int i = -13623;
i -= Math.floorMod(i, 1000);
//i => -14000
【讨论】: