webエンジニアの日常

RubyやPython, JSなど、IT関連の記事を書いています

最大値よりちょっと大きくてキリの良い数値を出力せよ

ここに、ユーザー登録数の推移が配列であります。[12,45,112,345,343,340]

これをグラフに表示する際に、配列の最大値より少し大きくてキリの良い数を出力したい。

そんな要望があったときの実装例です。

  def user_count_upper_bound(array = [0])
    upper_limit = array.sort.last
    return 0 if upper_limit <= 0
    num = upper_limit * 1.1
    digit = 10 ** Math.log10(num).to_i
    rank = num / digit
    19.times do |i|
      if  0.5 * (i + 2) > rank
        return (0.5 * (i + 2) * (10 ** Math.log10(num).to_i)).round(0)
      end
    end
  end
  • 実行例
最大値/上記メソッドの返り値
125/150
780/900
1250/1500
7600/8500
10000/15000
45000/50000
670000/750000