在Ruby中,我该怎么做:
number_total = records / per_page
其中per_page = 100
和records = 1050
,然后向上舍入,所以没有小数?那么,而不是10.5,它等于11?
答案 0 :(得分:28)
在评论后编辑
number_total = (records / per_page.to_f).ceil
答案 1 :(得分:1)
@lulala邪恶的另一个根源:挑选樱桃。
多次运行您的基准测试。 我得到以下内容:
V1 V2 V3 V4 V5 V6
Chevy V8 4D AT PS NAV
这是一个平局。
user system total real
0.120000 0.000000 0.120000 ( 0.119281)
0.120000 0.000000 0.120000 ( 0.123431)
这表明 user system total real
0.110000 0.000000 0.110000 ( 0.118602)
0.130000 0.000000 0.130000 ( 0.127195)
更快。
float_op
这表明 user system total real
0.150000 0.000000 0.150000 ( 0.151104)
0.120000 0.000000 0.120000 ( 0.123836)
我们更快。
答案 2 :(得分:0)
这是万恶之源:一种过早优化的方法:
class Integer
# returns quotient's ceiling integer
def div_ceil(divisor)
q = self / divisor
if self % divisor > 0
return q + 1
else
return q
end
end
end
以下基准代码:
require 'benchmark'
$a = 1050
$b = 100
def float_op
( $a / $b.to_f ).ceil
end
def integer_op
q = $a / $b
if $a % $b > 0
return q + 1
else
return q
end
end
n = 1000000
Benchmark.bm do |x|
x.report { n.times do; float_op; end }
x.report { n.times do; integer_op; end }
end
给我这个结果
user system total real
0.160000 0.000000 0.160000 ( 0.157589)
0.130000 0.000000 0.130000 ( 0.133821)
答案 3 :(得分:0)
如果您不希望使用浮点转换,请对其余项目使用%(模数)(这是我们在逻辑上思考时实际上确定#个页面的方式)。
number_total = (records / per_page) + ((records % per_page).positive? ? 1 : 0)
# (records / per_page) gets all full pages
# (records % per_page) get remainder of records after integer div
# + 1 only if remainder is positive