【问题标题】:How to round *down* integers in Java?如何在 Java 中舍入 *down* 整数?
【发布时间】:2009-11-23 14:38:16
【问题描述】:

我想在 Java 中将整数向下舍入到最接近的 1000。

例如:

  • 13,623 轮到 13,000
  • 18,999 轮到 18,000

【问题讨论】:

  • 您的意思是向下舍入还是舍入为零?当数字可以为负数时会有所不同。
  • 实际上我的意思是向下舍入,所以我只有数千个要处理,即 43,844 舍入到 43,000(不是 44,000)

标签: java numbers


【解决方案1】:

简单地除以 1000 去掉你不感兴趣的数字,然后乘以 1000:

i = i/1000 * 1000

或者,你也可以试试:

i = i - (i % 1000)

【讨论】:

  • +1:我从没想过以这种方式使用模数。此外,您可以通过 i -= i % 1000 稍微缩短行(不知道是否需要在右侧加上括号)
  • 真的吗?我一直认为模数是一种获取数字单位 (i % 10) 等的方法。关于缩短版本 - 这可能是我在代码中所做的,但希望在这里明确。
  • @jasons 请检查 OP 的描述,他想要这种行为(基本上想要“整数千”)
  • OP 没有指定负数的行为。当被问及向下舍入或向零舍入时,说“实际上我的意思是向下舍入”但不是特别清楚。
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-21
      • 2011-12-14
      • 1970-01-01
      • 2022-07-27
      • 2016-11-26
      • 2014-09-12
      • 1970-01-01
      • 2011-11-15
      相关资源
      最近更新 更多