【问题标题】:Get the next higher integer value in java [duplicate]在java中获取下一个更高的整数值[重复]
【发布时间】:2014-06-08 10:40:21
【问题描述】:

我知道我可以使用 Math.java 函数来获取 double 或 float 的 floor、ceil 或 round 值,但我的问题是 -- 如果小数点出现在我的价值

例如

int chunkSize  = 91 / 8 ; 

等于 11.375

如果我将 floor、ceil 或 round 应用于这个数字,它将返回 11 我想要 12。

如果我有 11.xxx 我需要 12 ,如果我有 50.xxx 我想要 51

对不起,chunkSize 应该是 int

我怎样才能做到这一点?

【问题讨论】:

  • "将等于 11.375" - 不正确。你应该投向一侧。
  • 如果我申请 floor, ceil 或四舍五入到这个数字,它将返回 11... What makes you think that?

标签: java math numbers


【解决方案1】:

ceil 应该这样做。我引用:

返回最小(最接近负无穷大)双精度值 大于或等于参数并且等于 a 数学整数。

编辑:(感谢彼得劳里):再看看你的代码,你还有另一个问题。您将整数除法的结果存储在浮点变量中:float chunkSize = 91 / 8 ; java 查看除法的参数,因为它们都是整数,所以它执行整数除法,因此结果再次是 integer (结果该部门的四舍五入)。现在,即使您将其分配给浮点 chunkSize,它仍然是一个整数(缺少双精度部分),并且 ceil、round 和 floor 都将返回相同的值。为避免这种情况,将.0 添加到91float chunkSize = 91.0 / 8;。这使得参数之一具有双精度,因此将执行双除法,返回双精度结果。

【讨论】:

  • 如果您已经执行了整数除法,这将无济于事。 91 / 8 == 11ceil(91 / 8) == 11.0
  • @PeterLawrey 好点。我会添加这个,因为显然这是 OP 遇到的问题。
【解决方案2】:

Math.ceil() 将完成这项工作。

但是,您认为91 / 811.375 的假设是错误的。 在 java 中,整数除法返回除法的 integer 值(在您的情况下为 11)。

为了获得浮点值,您需要强制转换(或添加 .0)到参数之一:

float chunkSize  = 91 / 8.0 ;
Math.ceil(chunkSize); // will return 12!

【讨论】:

    【解决方案3】:

    如果你想进行整数除法四舍五入,你可以这样做

    x / y 向上取整,假设 x 和 y 为正数

    long div = (x + y - 1) / y;
    

    你的情况

    (91 + 8 - 1) / 8 = 98 / 8 = 12
    

    之所以有效,是因为您希望对除精确倍数之外的每个值进行四舍五入(加一)(这就是您添加 y - 1 的原因)

    【讨论】:

      【解决方案4】:

      首先,当您编写 float chunkSize = 91 / 8 ; 时,它将打印 11.0 而不是 11.375

      因为 91 和 8 都是 int 类型的值。结果为十进制值,除数或除数

      或两者都必须是十进制值类型。因此,float chunkSize = 91.0 / 8; 将产生 11.375 和

      现在您可以应用 Math.ceil() 来获取上限值。 Math.ceil(chunkSize); 将导致 12.0

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-27
        • 2013-12-31
        • 2012-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-03
        • 1970-01-01
        相关资源
        最近更新 更多