class Numeric

Public Instance Methods

approx?(x, n=0.0000001) click to toggle source

Determines if another number is approximately equal within a given _n_th degree. Defaults to 100ths if the degree is not specified.

Currently defaults to 1/10,000,000 if the degree is not specified. But this may change once a “most commonly useful” factor is determined.

This is the same a {#close?} but has a different defualt.

@author Gavin Sinclair

# File lib/core/facets/numeric/approx.rb, line 13
def approx?(x, n=0.0000001)
  close?(x, n)
end
blank?() click to toggle source
# File lib/core/facets/kernel/blank.rb, line 80
def blank?
  false
end
clone?() click to toggle source
# File lib/core/facets/object/dup.rb, line 78
def clone? ; false ; end
close?(number, epsilon=0.01) click to toggle source

Determines if another number is approximately equal within a given epsilon.

This is the same a {#approx?} but has a different default. In this case it is 1/100th.

@author Gavin Sinclair

# File lib/core/facets/numeric/approx.rb, line 24
def close?(number, epsilon=0.01)
  return(self == number) if epsilon.zero?

  a, b = self.to_f, number.to_f
  if a.zero? or b.zero?
    ## There's no scale, so we can only go on difference.
    (a - b).abs < epsilon
  else
    ## We go by ratio. The ratio of two equal numbers is one, so the ratio
    ## of two practically-equal floats will be very nearly one.
    (a/b - 1).abs < epsilon
  end
end
delimit(options = {}) click to toggle source

Returns a string representation of the number e.g.

1000.delimit # => "1,000"
1000000.delimit # => "1,000,000"
(1000000.1234).delimit # => "1,000,000.1234"

Can take a hash of options:

  • delimiter - defaults to “,” but can be any string

  • separator - defaults to “.” but can be any string

    1000.delimit(:delimiter => “_”) # => “1_000” (1000.00).delimit(:delimiter => “.”, :separator => “,”) # => “1.000,00”

# File lib/core/facets/numeric/delimit.rb, line 13
def delimit(options = {})
  opts = { :delimiter => ',', :separator => '.' }.merge(options)
  digits, decimals = self.to_s.split('.')
  digits = digits.reverse.chars.each_slice(3).map(&:join).join(opts[:delimiter]).reverse
  return digits unless decimals
  [digits, decimals].join(opts[:separator])
end
distance(other) click to toggle source

Returns the distance between self an another value. This is the same as - but it provides an alternative for common naming between variant classes.

4.distance(3)  #=> 1
# File lib/core/facets/numeric/distance.rb, line 9
def distance(other)
  self - other
end
dup!() click to toggle source

Since Numeric is immutable it cannot be duplicated. For this reason try_dup returns self.

1.dup!  #=> 1
# File lib/core/facets/object/dup.rb, line 76
def dup!   ; self  ; end
dup?() click to toggle source
# File lib/core/facets/object/dup.rb, line 77
def dup?   ; false ; end
length() click to toggle source

Returns self, useful for polymorphic cases.

# File lib/core/facets/numeric/length.rb, line 5
def length
  self
end
negative?() click to toggle source

Is a number less than zero.

# File lib/core/facets/numeric/positive.rb, line 11
def negative?
  self < 0
end
plus_or_minus(value)
Alias for: range
positive?() click to toggle source

Is a number greater than zero.

# File lib/core/facets/numeric/positive.rb, line 5
def positive?
  self > 0
end
range(value) click to toggle source

Create a range from the number plus-or-minus a given value.

Return [Range]

# File lib/core/facets/numeric/range.rb, line 6
def range(value)
  Range.new(self - value, self + value)
end
Also aliased as: plus_or_minus
round_to(*args) click to toggle source

Conceptually, rounding is expected to apply to floating point numbers. However it can actually be applied to pretty much any Numeric object. For example, one could round an Integer to the nearest kilo.

See Float#round_to.

# File lib/core/facets/numeric/round_to.rb, line 9
def round_to(*args)
  to_f.round_to(*args)
end
spacing() click to toggle source

Returns the size of the string representation of a numerical value.

   1.spacing   #=> 1
  10.spacing   #=> 2
 100.spacing   #=> 3
-100.spacing   #=> 4
 1.2.spacing   #=> 3

CREDIT: Victor H. Goff III

# File lib/core/facets/numeric/spacing.rb, line 14
def spacing
  to_s.length
end
to_b() click to toggle source

Provides a boolean interpretation of self. If self == 0 then false else true.

0.to_b    #=> false
1.to_b    #=> true
2.3.to_b  #=> true
# File lib/core/facets/boolean.rb, line 64
def to_b
  self == 0 ? false : true
end