有没有办法将整数除法向上的结果舍入到最接近的整数,而不是向下?
例如,我想更改默认行为:
irb(main):001:0> 5 / 2
=> 2
出现以下行为:
irb(main):001:0> 5 / 2
=> 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