arithmetic.rb

Path: lib/money/money/arithmetic.rb
Last Update: Sat Feb 23 07:12:07 +0000 2019

Methods

%   *   -@   /   <=>   ==   abs   coerce   div   divmod   eql?   modulo   negative?   nonzero?   positive?   remainder   zero?  

Public Instance methods

Synonym for +modulo+.

@param [Money, Integer] val Number take modulo with.

@return [Money]

@see modulo

Multiplies the monetary value with the given number and returns a new Money object with this monetary value and the same currency.

Note that you can‘t multiply a Money object by an other Money object.

@param [Numeric] value Number to multiply by.

@return [Money] The resulting money.

@raise [TypeError] If value is NOT a number.

@example

  Money.new(100) * 2 #=> #<Money @fractional=200>

Returns a money object with changed polarity.

@return [Money]

@example

   - Money.new(100) #=> #<Money @fractional=-100>

Divides the monetary value with the given number and returns a new Money object with this monetary value and the same currency. Can also divide by another Money object to get a ratio.

+Money/Numeric+ returns Money. +Money/Money+ returns Float.

@param [Money, Numeric] value Number to divide by.

@return [Money] The resulting money if you divide Money by a number. @return [Float] The resulting number if you divide Money by a Money.

@example

  Money.new(100) / 10            #=> #<Money @fractional=10>
  Money.new(100) / Money.new(10) #=> 10.0

Compares two Money objects. If money objects have a different currency it will attempt to convert the currency.

@param [Money] other_money Value to compare with.

@return [Integer]

@raise [TypeError] when other object is not Money

Uses Comparable‘s implementation but raises ArgumentError if non-zero numeric value is given.

Return absolute value of self as a new Money object.

@return [Money]

@example

  Money.new(-100).abs #=> #<Money @fractional=100>

Used to make Money instance handle the operations when arguments order is reversed @return [Array]

@example

  2 * Money.new(10) #=> #<Money @fractional=20>

Synonym for +#/+.

@param [Money, Numeric] value Number to divide by.

@return [Money] The resulting money if you divide Money by a number. @return [Float] The resulting number if you divide Money by a Money.

@see #/

Divide money by money or fixnum and return array containing quotient and modulus.

@param [Money, Integer] val Number to divmod by.

@return [Array<Money,Money>,Array<Integer,Money>]

@example

  Money.new(100).divmod(9)            #=> [#<Money @fractional=11>, #<Money @fractional=1>]
  Money.new(100).divmod(Money.new(9)) #=> [11, #<Money @fractional=1>]

Checks whether two Money objects have the same currency and the same amount. If Money objects have a different currency it will only be true if the amounts are both zero. Checks against objects that are not Money or a subclass will always return false.

@param [Money] other_money Value to compare with.

@return [Boolean]

@example

  Money.new(100).eql?(Money.new(101))                #=> false
  Money.new(100).eql?(Money.new(100))                #=> true
  Money.new(100, "USD").eql?(Money.new(100, "GBP"))  #=> false
  Money.new(0, "USD").eql?(Money.new(0, "EUR"))      #=> true
  Money.new(100).eql?("1.00")                        #=> false

Equivalent to +self.divmod(val)[1]+

@param [Money, Integer] val Number take modulo with.

@return [Money]

@example

  Money.new(100).modulo(9)            #=> #<Money @fractional=1>
  Money.new(100).modulo(Money.new(9)) #=> #<Money @fractional=1>

Test if the amount is negative. Returns true if the money amount is less than 0, false otherwise.

@return [Boolean]

@example

  Money.new(-1).negative? #=> true
  Money.new(0).negative?  #=> false
  Money.new(1).negative?  #=> false

Test if the money amount is non-zero. Returns this money object if it is non-zero, or nil otherwise, like +Numeric#nonzero?+.

@return [Money, nil]

@example

  Money.new(100).nonzero? #=> #<Money @fractional=100>
  Money.new(0).nonzero?   #=> nil

Test if the amount is positive. Returns true if the money amount is greater than 0, false otherwise.

@return [Boolean]

@example

  Money.new(1).positive?  #=> true
  Money.new(0).positive?  #=> false
  Money.new(-1).positive? #=> false

If different signs +self.modulo(val) - val+ otherwise +self.modulo(val)+

@param [Money, Integer] val Number to rake remainder with.

@return [Money]

@example

  Money.new(100).remainder(9) #=> #<Money @fractional=1>

Test if the money amount is zero.

@return [Boolean]

@example

  Money.new(100).zero? #=> false
  Money.new(0).zero?   #=> true

[Validate]