Build Status Docs Cocoapods SPM

A Swift representation of money / monetary amounts and ISO 4217 currency designations. Supports manipulation and combination of monetary amounts of a single currency or multiple currencies.

Handles minor units (the exponent, e.g. cents for USD) for each currency as specified in the ISO 4217 standard. Simple manipulation includes consolidating / combining amounts.

MonetaryAmount values that have the same Currency will be added together, MonetaryAmount values with unique Currency values will be added to the result on their own.



pod 'MonetaryAmount', '~> 1.1.0'

Swift Package Manager

dependencies: [
   .package(url: "", from: "1.1.0")

Usage Example

let moneyA =
let moneyB =
let moneyC =

// result would equal [,]
let result = [moneyA, moneyB, moneyC].consolidating(moneyB)

The underlying value for the amount is represented by a DynamicRoundedDecimal which itself uses the Swift Decimal type. DynamicRoundedDecimal handles rounding internally as declared by the given currency’s minorUnit.


// moneyA and moneyB are equal and represent US$28.53
let moneyA = MonetaryAmount(currency: Currency.USD, value: Decimal(string: "28.529372")!)
let moneyB =


MonetaryAmount does not do any FX or conversion of currencies, it keeps each individual currency subtotal separate.

See Also

Wikipedia Entry for ISO 4217