Как делают меня круглые числа до динамической точности в Ruby on Rails?

В ASP.NET Core 2.2 появилась новая служба LinkGenerator, одноэлементная, которую можно вызывать вне контекста HTTP-вызова для генерации строки URL-адреса.

Пример:

public class SampleController : ControllerBase
{
  protected readonly LinkGenerator _linkGenerator;
  / ...

(а затем в методе действия):

return _linkGenerator.GetPathByAction(
     httpContext,
     controller: "Home",
     action: "Index",
     values: new { id=1 });
5
задан Tony 17 May 2009 в 23:35
поделиться

2 ответа

Другой способ:

def roundup(num)
  x = Math.log10(num).floor
  num=(num/(10.0**x)).ceil*10**x
  return num
end

Более идиоматически:

def roundup(num)
  x = Math.log10(num).floor
  (num/(10.0**x)).ceil * 10**x
end
14
ответ дан 18 December 2019 в 13:18
поделиться

Вот решение. Он реализует следующие правила:

  • 0 и степени 10 не изменяются;
  • 9 ??? округляется до 10000 (независимо от длины);
  • A ??? округляется до B000 (независимо от длины), где B - цифра, следующая за A.

.

def roundup(n)
  n = n.to_i
  s = n.to_s
  s =~ /\A1?0*\z/ ? n : s =~ /\A\d0*\z/ ? ("1" + "0" * s.size).to_i :     
      (s[0, 1].to_i + 1).to_s + "0" * (s.size - 1)).to_i
end

fail if roundup(0) != 0
fail if roundup(1) != 1
fail if roundup(8) != 10
fail if roundup(34) != 40
fail if roundup(99) != 100
fail if roundup(100) != 100
fail if roundup(120) != 200
fail if roundup(360) != 400
fail if roundup(990) != 1000
fail if roundup(1040) != 2000
fail if roundup(1620) != 2000
fail if roundup(5070) != 6000
fail if roundup(6000) != 10000
fail if roundup(9000) != 10000
0
ответ дан 18 December 2019 в 13:18
поделиться
Другие вопросы по тегам:

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