class Numeric

Public Instance Methods

add(num) click to toggle source
# File lib/lite/ruby/numeric.rb, line 5
def add(num)
  self + num
end
at_least(lower) click to toggle source
# File lib/lite/ruby/numeric.rb, line 9
def at_least(lower)
  self >= lower ? self : lower
end
at_most(upper) click to toggle source
# File lib/lite/ruby/numeric.rb, line 13
def at_most(upper)
  self <= upper ? self : upper
end
close?(number, epsilon = 0.01) click to toggle source
# File lib/lite/ruby/numeric.rb, line 17
def close?(number, epsilon = 0.01)
  return self == number if epsilon.zero?

  a = to_f
  b = number.to_f

  if a.zero? || b.zero?
    (a - b).abs < epsilon
  else
    (a / b - 1).abs < epsilon
  end
end
decrement(amount = 1.0) click to toggle source
# File lib/lite/ruby/numeric.rb, line 30
def decrement(amount = 1.0)
  self - amount
end
delimit(options = {}) click to toggle source
# File lib/lite/ruby/numeric.rb, line 34
def delimit(options = {})
  delimiter = options[:delimiter] || ','
  separator = options[:separator] || '.'

  digits, decimals = to_s.split('.')
  digits = digits.reverse.chars.each_slice(3).map(&:join).join(delimiter).reverse

  return digits unless decimals

  [digits, decimals].join(separator)
end
delta(num) click to toggle source
# File lib/lite/ruby/numeric.rb, line 46
def delta(num)
  (self - num).abs
end
distance(num) click to toggle source
# File lib/lite/ruby/numeric.rb, line 50
def distance(num)
  self - num
end
divide(num) click to toggle source
# File lib/lite/ruby/numeric.rb, line 54
def divide(num)
  return num if num.zero?

  self / num
end
eq?(num)
Alias for: equal_to?
equal_to?(num) click to toggle source
# File lib/lite/ruby/numeric.rb, line 60
def equal_to?(num)
  self == num
end
Also aliased as: eq?
fraction() click to toggle source
# File lib/lite/ruby/numeric.rb, line 64
def fraction
  (self - truncate).abs
end
fraction?() click to toggle source
# File lib/lite/ruby/numeric.rb, line 68
def fraction?
  fraction.to_d != 0.0.to_d
end
greater_than?(num) click to toggle source
# File lib/lite/ruby/numeric.rb, line 72
def greater_than?(num)
  num < self
end
Also aliased as: gt?
greater_than_or_equal_to?(num) click to toggle source
# File lib/lite/ruby/numeric.rb, line 76
def greater_than_or_equal_to?(num)
  num <= self
end
Also aliased as: gteq?
gt?(num)
Alias for: greater_than?
gteq?(num)
increment(amount = 1.0) click to toggle source
# File lib/lite/ruby/numeric.rb, line 80
def increment(amount = 1.0)
  self + amount
end
ineq?(num)
Alias for: not_equal_to?
inequal_to?(num)
Alias for: not_equal_to?
inside?(start, finish) click to toggle source
# File lib/lite/ruby/numeric.rb, line 84
def inside?(start, finish)
  (start < self) && (finish > self)
end
less_than?(num) click to toggle source
# File lib/lite/ruby/numeric.rb, line 88
def less_than?(num)
  num > self
end
Also aliased as: lt?
less_than_or_equal_to?(num) click to toggle source
# File lib/lite/ruby/numeric.rb, line 92
def less_than_or_equal_to?(num)
  num >= self
end
Also aliased as: lteq?
lt?(num)
Alias for: less_than?
lteq?(num)
many?() click to toggle source
# File lib/lite/ruby/numeric.rb, line 96
def many?
  to_f > 1.0
end
markdown_percentage(percent) click to toggle source
# File lib/lite/ruby/numeric.rb, line 100
def markdown_percentage(percent)
  to_f * ((100.0 - percent.to_f) / 100.0)
end
markup_percentage(percent) click to toggle source
# File lib/lite/ruby/numeric.rb, line 104
def markup_percentage(percent)
  to_f + (to_f * (percent.to_f / 100.0))
end
multiple_of?(number) click to toggle source
# File lib/lite/ruby/numeric.rb, line 112
def multiple_of?(number)
  return zero? if number.zero?

  modulo(number).zero?
end
multiply(num) click to toggle source
# File lib/lite/ruby/numeric.rb, line 108
def multiply(num)
  self * num
end
negate() click to toggle source
# File lib/lite/ruby/numeric.rb, line 118
def negate
  -self
end
not_eq?(num)
Alias for: not_equal_to?
not_equal_to?(num) click to toggle source
# File lib/lite/ruby/numeric.rb, line 122
def not_equal_to?(num)
  self != num
end
Also aliased as: inequal_to?, ineq?, not_eq?
one?() click to toggle source
# File lib/lite/ruby/numeric.rb, line 126
def one?
  to_d == 1.0.to_d
end
ordinal() click to toggle source
# File lib/lite/ruby/numeric.rb, line 130
def ordinal
  return 'th' if (11..13).cover?(abs % 100)

  case abs % 10
  when 1 then 'st'
  when 2 then 'nd'
  when 3 then 'rd'
  else 'th'
  end
end
ordinalize() click to toggle source
# File lib/lite/ruby/numeric.rb, line 141
def ordinalize
  "#{self}#{ordinal}"
end
outside?(start, finish) click to toggle source
# File lib/lite/ruby/numeric.rb, line 145
def outside?(start, finish)
  (start > self) || (finish < self)
end
pad(options = {}) click to toggle source
# File lib/lite/ruby/numeric.rb, line 149
def pad(options = {})
  pad_number = options[:pad_number] || 0
  precision = options[:precision] || 3

  to_s.rjust(precision, pad_number.to_s)
end
pad_precision(options = {}) click to toggle source

rubocop:disable Metrics/AbcSize, Metrics/MethodLength

# File lib/lite/ruby/numeric.rb, line 157
def pad_precision(options = {})
  pad_number = options[:pad_number] || 0
  precision = options[:precision] || 2
  separator = options[:separator] || '.'
  string = to_s

  string << separator unless string.include?(separator)
  ljust_count = string.split(separator).first.length
  ljust_count += (string.count(separator) + precision) if precision.positive?

  if ljust_count >= string.length
    string.ljust(ljust_count, pad_number.to_s)
  else
    string[0..(ljust_count - 1)]
  end
end
percentage_of(number) click to toggle source

rubocop:enable Metrics/AbcSize, Metrics/MethodLength

# File lib/lite/ruby/numeric.rb, line 175
def percentage_of(number)
  return 0 if zero? || number.zero?

  (self / number.to_f) * 100.0
end
plus_minus(value)
Alias for: range
power(num) click to toggle source
# File lib/lite/ruby/numeric.rb, line 181
def power(num)
  self**num
end
range(value) click to toggle source
# File lib/lite/ruby/numeric.rb, line 185
def range(value)
  (self - value)..(self + value)
end
Also aliased as: plus_minus
root(num) click to toggle source
# File lib/lite/ruby/numeric.rb, line 189
def root(num)
  self**(1.0 / num)
end
round_down(num = 0) click to toggle source
# File lib/lite/ruby/numeric.rb, line 193
def round_down(num = 0)
  int, dec = to_f.to_s.split('.')

  "#{int}.#{dec[0...num]}".to_f
end
subtract(num) click to toggle source
# File lib/lite/ruby/numeric.rb, line 199
def subtract(num)
  self - num
end
to_currency(options = {}) click to toggle source
# File lib/lite/ruby/numeric.rb, line 203
def to_currency(options = {})
  unit = options[:unit] || '$'

  "#{unit}#{pad_precision(options.only(:precision))}"
end
to_nearest_value(values = []) click to toggle source
# File lib/lite/ruby/numeric.rb, line 209
def to_nearest_value(values = [])
  return self if values.length.zero?

  value = values.first
  difference = (self - value).abs

  values.each do |val|
    next unless (self - val).abs < difference

    difference = (self - val).abs
    value = val
  end

  value
end
to_percentage(options = {}) click to toggle source
# File lib/lite/ruby/numeric.rb, line 225
def to_percentage(options = {})
  unit = options[:unit] || '%'

  "#{pad_precision(options.only(:precision))}#{unit}"
end
to_range() click to toggle source

rubocop:disable Lint/AmbiguousRange

# File lib/lite/ruby/numeric.rb, line 232
def to_range
  negative? ? (self..-self) : (-self..self)
end
within?(number, epsilon = 0.01) click to toggle source

rubocop:enable Lint/AmbiguousRange

# File lib/lite/ruby/numeric.rb, line 237
def within?(number, epsilon = 0.01)
  return number == self if epsilon.zero?

  alpha = to_f
  beta = number.to_f

  if alpha.zero? || beta.zero?
    (alpha - beta).abs < epsilon
  else
    (alpha / beta - 1).abs < epsilon
  end
end