整数除法可以向上舍入而不是向下舍入?

时间:2015-08-21 16:02:56

标签: ruby integer-division

有没有办法将整数除法向上的结果舍入到最接近的整数,而不是向下

例如,我想更改默认行为:

irb(main):001:0> 5 / 2
=> 2

出现以下行为:

irb(main):001:0> 5 / 2
=> 3

3 个答案:

答案 0 :(得分:2)

您正在寻找的功能是ceil

Ceil返回最接近的整数,向上舍入为浮点数。

4/3 = 1
4.0/3.0 = 1.3333...3
(4.0/3.0).ceil = 2

另外,请注意这是向正方向发展,所以

(-4.0/3.0).ceil = -1, NOT -2
  • 此外,还有相应的floor函数向下舍入。

答案 1 :(得分:1)

这是一个算法问题而非ruby特定问题 试试(a + b - 1) / b。例如

(5 + 2 - 1) / 2  #=> 3
(10 + 3 - 1) / 3  #=> 4
(6 + 3 - 1) / 3  #=> 2

您可以在divide_by类(猴子补丁)中定义一个实例方法,比如Integer

class Integer
  def divide_by(divisor)
    (self + divisor - 1) / divisor
  end
end

根据我的基准测试结果,它比to_f然后ceil解决方案快了约1/2倍。

答案 2 :(得分:0)

如果您真正想要的是Integer div,如果还有余数,则四舍五入,就直接做就好了,因为逻辑将在纸上使用第二行模块化操作(%)来检查除法的余数:

a = 5
b = 2

result = a  / b #=> 2
result += 1 if (a % b).positive?

#=> 3

a = 6
b = 3
result = a  / b #=> 2
result += 1 if (a % b).positive?

#=> 2