struct

Money

Inherits JSON::Serializable / Comparable / Money::Exchange / Money::Formatting / Money::Allocate / Money::Arithmetic / Money::Casting / Struct / Value / Object

"Money is any object or record that is generally accepted as payment for goods and services and repayment of debts in a given socio-economic context or country." - Wikipedia

An instance of Money represents an amount of a specific currency.

Money is a value object and should be treated as immutable.

Constants

VERSION = {{ (`shards version \"/tmp/tmp.aCNCAl/src/src/money\"`).chomp.stringify }}

Constructors

new(amount : Number = 0, currency = Money.default_currency, bank = nil)

Creates a new Money object of value given as an amount of the given currency (as fractional if Int, or whole amount otherwise)

Money.new                      # => Money(@amount=0 @currency="USD")
Money.new(1_50)                # => Money(@amount=1.5 @currency="USD")
Money.new(1.5, :usd)           # => Money(@amount=1.5 @currency="USD")
Money.new(1.5.to_big_d, "USD") # => Money(@amount=1.5 @currency="USD")
Source
new(pull : JSON::PullParser)
Source
new(*, __pull_for_json_serializable pull : JSON::PullParser)
Source

Class methods

default_bank

Each Money object is associated to a bank object, which is responsible for currency exchange. This property allows you to specify the default bank object. The default value for this property is an instance of Bank::VariableExchange. It allows one to specify custom exchange rates.

Source
default_bank=(default_bank : Bank)

Each Money object is associated to a bank object, which is responsible for currency exchange. This property allows you to specify the default bank object. The default value for this property is an instance of Bank::VariableExchange. It allows one to specify custom exchange rates.

Source
default_currency

Sets the default currency for creating new Money object.

Source
default_currency=(default_currency : Currency)

Sets the default currency for creating new Money object.

Source
default_currency=(currency_code : String | Symbol)

Sets the default currency for creating new Money object.

Source
disallow_currency_conversion!

Sets the default bank to be a Bank::SingleCurrency bank that raises on currency exchange. Useful when apps operate in a single currency at a time.

Source
infinite_precision=(infinite_precision : Bool)

Use this to enable infinite precision cents

Source
infinite_precision?

Use this to enable infinite precision cents

Source
rounding_mode

Default rounding mode

Source
rounding_mode=(rounding_mode : Number::RoundingMode)

Default rounding mode

Source
with_rounding_mode(mode : Number::RoundingMode, &)

Sets the given rounding mode within the scope of the given block

Source

Instance methods

<=>(other : Money) : Int32

Compares two Money objects.

Source
amount

Returns the numerical value of the money.

Money.new(1_00, "USD").amount # => 1.0

See #to_big_d and #fractional, also Money.rounding_mode.

Source
bank

The Bank object which currency exchanges are performed with.

NOTE: Setting nil (the default) will delegate to Money.default_bank.

Source
bank=(bank : Bank | Nil)

The Bank object which currency exchanges are performed with.

NOTE: Setting nil (the default) will delegate to Money.default_bank.

Source
cents

Alias of #fractional.

Source
currency

The money's currency.

Source
dollars

Alias of #amount.

Source
fractional

The value of the monetary amount represented in the fractional or subunit of the currency.

For example, in the US dollar currency the fractional unit is cents, and there are 100 cents in one US dollar. So given the Money representation of one US dollar, the fractional interpretation is 100.

Another example is that of the Kuwaiti dinar. In this case the fractional unit is the fils and there 1000 fils to one Kuwaiti dinar. So given the Money representation of one Kuwaiti dinar, the fractional interpretation is 1000.

FIXME: Doesn't work with Money.infinite_precision? yet

Source
hash(hasher)

Returns hash value based on the amount and currency attributes.

Source
nearest_cash_value

Returns the nearest possible amount in cash value (cents).

For example, in Swiss franc (CHF), the smallest possible amount of cash value is CHF 0.05. Therefore, for CHF 0.07 this method returns CHF 0.05, and for CHF 0.08, CHF 0.10.

See Currency#smallest_denomination, also Money.rounding_mode.

Source
rounded_to_nearest_cash_value

See #nearest_cash_value.

Source

Nested types