Скажите, что у меня есть любое из следующих чисел:
230957 или 83487 или 4785
Что такое путь в Ruby, я мог возвратить их как 300 000 или 90000 или 5000, соответственно?
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
Это выглядит немного уродливо, но как первая попытка (округляется вверх каждый раз) ...
>> (("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
Я не занимался кодированием в 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.
Надеюсь, это поможет!