Как делают меня вокруг целого числа до <ближайшее большое количество> в Ruby?

Скажите, что у меня есть любое из следующих чисел:

230957 или 83487 или 4785

Что такое путь в Ruby, я мог возвратить их как 300 000 или 90000 или 5000, соответственно?

9
задан Jonathan Leffler 22 April 2011 в 22:05
поделиться

3 ответа

def round_up(number)
  divisor = 10**Math.log10(number).floor
  i = number / divisor
  remainder = number % divisor
  if remainder == 0
    i * divisor
  else
    (i + 1) * divisor
  end
end

С вашими примерами:

irb(main):022:0> round_up(4785)
=> 5000    
irb(main):023:0> round_up(83487)
=> 90000
irb(main):024:0> round_up(230957)
=> 300000
5
ответ дан 4 December 2019 в 13:44
поделиться

Это выглядит немного уродливо, но как первая попытка (округляется вверх каждый раз) ...

>> (("230957".split("").first.to_i + 1).to_s + \
   ("0" * ("230957".size - 1))).to_i
=> 300000

Лучше (раунды правильные):

>> (230957 / 10 ** Math.log10(230957).floor) * \
   10 ** Math.log10(230957).floor
=> 200000
1
ответ дан 4 December 2019 в 13:44
поделиться

Я не занимался кодированием в Ruby, но вы сможете сделать это со стандартной функцией округления, если сначала сдвинете ее до нужной вам цифры.

Пример:

230957 / 100000(the resolution you want) = 2.30957

Округлить 2.30957 = 2, или Округлить до потолка/округлить значение + 0.5, чтобы получить верхнее значение, а не нижнее.

2 or 3 * 100000(the resolution you want) = 200000 or 300000 respectively.

Надеюсь, это поможет!

1
ответ дан 4 December 2019 в 13:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: