Как установить переменную для разделения и округления до 0 знаков после запятой? В Ruby, как я могу сделать: number_total = records / per_page где per_page = 100 и records = 1050, а затем округлить, чтобы не было десятичных знаков? Таким образом, вместо 10.5 оно равно 11? Ответ 1 Отредактировано после комментария number_total = (records / per_page.to_f).ceil Ответ 2 @lulala Еще один корень всего зла: результаты сбора вишни. Запустите свой тест несколько раз. Я получаю следующее: 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) Это говорит о том, что integer_op нас быстрее. Ответ 3 Вот корень всего зла: преждевременно оптимизированный метод: class Integer # returns quotient 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)
Ответ 2 @lulala Еще один корень всего зла: результаты сбора вишни. Запустите свой тест несколько раз. Я получаю следующее: 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) Это говорит о том, что integer_op нас быстрее.
Ответ 3 Вот корень всего зла: преждевременно оптимизированный метод: class Integer # returns quotient 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)