class Numeric
  ONE_MEGABYTE = 1000000

  def roundup(nearest=10)
    self % nearest == 0 ? self : self + nearest - (self % nearest)
  end

  def to_mb
    self/ONE_MEGABYTE.to_f
  end

  def to_bytes_pretty
    space = (self.to_f / ONE_MEGABYTE).round(2)
    space = space.to_i if space.denominator == 1
#    if space >= 1000000
#      "#{space/1000000} TB"
    if space >= 1000
      "#{(space/1000).to_comma_separated} GB"
    else
      "#{space.to_comma_separated} MB"
    end
  end

  def to_comma_separated
    self.to_s.chars.to_a.reverse.each_slice(3).map(&:join).join(",").reverse
  end

  def format_large_number
    if self > 9999
      if self > 999999999
        unit_char = 'B' #billion
        unit_amount = 1000000000.0
      elsif self > 999999
        unit_char = 'M' #million
        unit_amount = 1000000.0
      elsif self > 9999
        unit_char = 'K' #thousand
        unit_amount = 1000.0
      end

      self_divided = self.to_f / unit_amount
      self_rounded = self_divided.round(1)

      if self_rounded.denominator == 1
        return sprintf ("%.0f" + unit_char), self_divided
      else
        return sprintf ("%.1f" + unit_char), self_divided
      end
    else
      if self > 999
        return self.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse
      else
        return self
      end
    end
  end

  def to_space_pretty
    to_bytes_pretty
  end
end