Как установить переменную для деления и округления до 0 десятичных знаков? - PullRequest
15 голосов
/ 10 мая 2011

В Ruby, как я могу сделать:

number_total = records / per_page

где per_page = 100 и records = 1050, а затем округлить, чтобы не было десятичных дробей?Таким образом, вместо 10,5 это равно 11?

Ответы [ 3 ]

28 голосов
/ 10 мая 2011

Отредактировано после комментария

number_total = (records / per_page.to_f).ceil
1 голос
/ 22 января 2017

@ 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 нас быстрее.

0 голосов
/ 21 октября 2014

Вот корень зла: преждевременно оптимизированный метод:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...