moneyphp/money
PHP implementation of Fowler's Money pattern
v4.9.0
98M downloads/mo
#326 most downloaded on Packagist
moneyphp/money
What this package is like to depend on
Last release 3 months ago
04 May 2026
Ships fairly regularly
a new release about every 4 months
Most releases are documented
notes for 35 of 42 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
48 releases · first in 2012
2 releases in the last 12 months
see the full history below
Release timeline
48 releases · Aug 2012 to May 2026Releases
latest 48-
v4.9.004 May 2026 -
v4.8.023 Oct 2025 -
v4.7.106 Jun 2025 -
v4.7.003 Apr 2025 -
v4.6.022 Nov 2024 -
v4.5.127 Sep 2024Nothing published for this version
-
v4.5.015 Feb 2024Release notes
Open source →Fixed
- PHPUnit 10 support
- Update currencies
- Updated doctrine/coding-standard
- Updated other dev dependencies
Removed
- PHP 8.0 support
-
v4.4.024 Jan 2024Release notes
Open source →Extended support for psr/cache, now version 1.0.1 up until 3.0 is supported.
Release notes
Open source →Added
- Extended support for psr/cache, now version 1.0.1 up until 3.0 is supported.
-
v4.3.022 Nov 2023Release notes
Open source →Added
- Support for PHP 8.3
- Allow divisor in mod to be a number as well
Removed
- PHPSpec tests, we are using PHPUnit only now
-
v4.2.016 Aug 2023 -
v4.1.111 Apr 2023Release notes
Open source →Fixed
- Optimized result representation for BcMathCalculator
- Use sprintf for float to string conversion in swap exchange
- Fix rounding to unit with value between 10 and 49
- Return type for DecimalMoneyFormatter::format is numeric-string
- Money::ratioOf throws exception if currencies don't match.
- Updated currencies: added SLE and VED, removed HRK.
- Do not let php-http/discovery change composer.json.
-
v4.1.019 Dec 2022Release notes
Open source →Added
- Full PHP8.2 compatibility
Fixed
- Fix parsing amounts with leading zero's
- Fix invalid exception message in DecimalMoneyParser
- Upgrade enchant to newer version
- Support Psalm 5.3
- Fix ROUND_UP and ROUND_DOWN in roundToUnit
Changes
composer.lockis not committed anymore- MoneyFactory now also contains crypto-currencies
Added
CryptoCurrenciesclass that serves crypto-currencies from moneyphp/crypto-currencies
-
v4.0.511 Aug 2022 -
v4.0.418 May 2022Release notes
Open source →Added
- Full PHP8.1 compatibility (#670)
Changes
- Dropped mutation testing as the library owners are unfamiliar with it
- CHANGELOG BC change improvement
-
v4.0.301 Dec 2021Release notes
Open source →Fixed
jsonSerializereturn types, resulting in no PHP 8.1 warnings.- Documentation CI pipeline failure.
-
v4.0.230 Jun 2021Release notes
Open source →Changes
- Added all extensions to
composer.json, including those bundled with PHP.
Fixed
- Remove all
emptyuses. Money values of '0' gave an assertion error in decimal formats (#655)
- Added all extensions to
-
v4.0.125 May 2021Release notes
Open source →Changed
- Allow
intas multiplier forMoney::multiply - Allow
intas divisor forMoney::divide
- Allow
-
v4.0.017 May 2021Release notes
Open source →Added
- PHP8.0 compatibility (#633 and #619)
- Recommendation to use a type-checker like psalm or phpstan
- Rounding to units
Converter#convertAndReturnWithCurrencyPairto get the combination of the converted money and currency pairConverter#convertAgainstCurrencyPairto convert against a currency pair
Changed
- [BC break] BC Math required as it is the default calculator
- [BC break] The methods
multiplyanddividedo not accept floating points any more. Callers are required to convert a float to string (e.g.sprintf('%.14F', $float)) before calling these methods. - [BC break] The constructor of the
FixedExchangedoes not accept floating points any more. Callers are required to convert a float to string (e.g.sprintf('%.14F', $float)) before calling the constructor. - Allow multiple arguments to
Money#isSameCurrency - Renamed second parameter of
Parser#parseto$fallbackCurrency
Fixed
- Fix GMP multiply and divide by negative (#640 #626)
- Currency code must be uppercase (#639 #638 #637)
- The CPU no longer overheats when using this library (#634)
- No longer allowing null amount (#615)
- Update cached currencies (#583)
- Only numeric strings allowed (#575)
- Calculator and Number are internal (#465)
- Negative ratio in
Money#allocate()is now allowed (#258)
Removed
- [BC break] Removed
PhpCalculator - [BC break] Removed
Currency#isAvailableWithin() - [BC break] Removed string as allowed type for second parameter to
MoneyParser#parse, only Currency objects are accepted now - [BC break] Completely remove float usage, methods now return numeric-strings
-
v4.0.0-beta105 May 2021 pre-releaseNothing published for this version
-
v3.3.321 Sep 2022Nothing published for this version
-
v3.3.205 Sep 2022Nothing published for this version
-
v3.3.118 Mar 2020 -
v3.3.027 Dec 2019Release notes
Open source →Changed
- Added types for
Moneyto be understood as pure/immutable downstream (#576)
Fixed
- JSON serialization (#551)
- Several documentation fixes
- Minor fixes
- Added types for
-
v3.2.107 Feb 2019Release notes
Open source →Changed
Money::allocatenow maintains keys of ratios array- All parsers now emit a deprecation warning when passing currency as string
Fixed
- Docs fix : plus sign in numeric strings is allowed
- Added ext-json as required extension
- Throw exception in case of empty currency
- BCMath calculator now uses scale parameters for addition and subtracting
- Fixed allocation remainder bug
- Added PHP 7.3 in test suite
- Fixed dockerignore to ignore Dockerfile
- Fixed Bitcoin parsing bug when using trailing zeros
-
v3.2.005 Dec 2018Release notes
Open source →Added
- Exchanger exchange
- Generated static factory to help IDEs understand code like
Money::EUR(500) - Aggregation functions (min, max, avg, sum)
Changed
Money::addandMoney::subtractnow accept variadic arguments
Fixed
- Division causing unnecessary fractional parts
- Numeric comparison for negative numbers
-
v3.1.316 Feb 2018 -
v3.1.215 Feb 2018Release notes
Open source →Added
Number::fromNumberto be used when the actual type is not known
Changed
- Refactored
Numberusage to make the code cleaner and use less casting
Fixed
- Float cast to string issue on certain locales
-
v3.1.119 Jan 2018Release notes
Open source →Fixed
- Float cast to string issue on certain locales
- Deal with numbers represented with E-XX
-
v3.1.010 Jan 2018Release notes
Open source →Added
- CurrencyList to instantiate in-memory currencies
- modulus method to Money
- ratioOf method to Money
- Comparator for easier testing Money object with PHPUnit
- IntlLocalizedDecimalParser and IntlLocalizedDecimalFormatter
Changed
MoneyParser::parsemethod now expects a Currency object- Dropped PHP 5.5
Deprecated
- Passing currency code as string to
MoneyParser::parse
Fixed
- Do not allocate remainder to a ratio of zero
- Conversion result is always 0 when subunit difference is large enough
- Unexpected result when converting small Bitcoin amounts
- Fixed StyleCI being too aggressive
-
v3.0.905 Nov 2017 -
v3.0.803 Oct 2017Release notes
Open source →Fixed
- Rounding issue in Number class.
- Reduce composer package file size by leaving out docs and logo.
- Missing Travis tests for PHP 7.2.
-
v3.0.704 Aug 2017 -
v3.0.625 Jul 2017Release notes
Open source →Added
- IndirectExchange: a way to get an exchange rate through a minimal set of intermediate conversions.
Fixed
- Tests for HHVM
- Incorrect documentation on Bitcoin parser
-
v3.0.526 Apr 2017 -
v3.0.421 Apr 2017Release notes
Open source →Added
- Negative method
Changed
- Updated ISO Currencies
- Removed old Belarusian ruble from ISOCurrencies (BYR)
Fixed
- ISOCurrencies will no longer have a blank currency
- Double symbol when formatting negative Bitcoin amounts
-
v3.0.322 Mar 2017Release notes
Open source →Fixed
- Parsing empty strings and number starting or ending with a decimal point for DecimalMoneyParser
- Parsing zero for DecimalMoneyParser
- Multiplying and dividing with a locale that use commas as separator
-
v3.0.211 Mar 2017Release notes
Open source →Fixed
- BCMath / GMP: comparing values smaller than one
- GMP: multiplying with zero
- ISOCurrencies: minor refactoring, remove duplication of code
-
v3.0.114 Feb 2017Release notes
Open source →Added
- Reversed Currencies Exchange to try resolving reverse of a currency pair
- Documentation on allowed integer(ish) values when constructing Money
Fixed
- Passing integer validation when chunk started with a dash
- Passing integer validation when the fractional part started with a dash
- Formatting problem for Bitcoin currency with small amounts in PHP < 7.0
- Money constructed from a string with fractional zeroes equals to a Money constructed without the fractional part (eg.
'5.00'and'5')
-
v3.0.026 Oct 2016Release notes
Open source →Added
- DecimalMoneyFormatter: returns locale-independent raw decimal string
Changed
- [BC break] Replaced StringToUnitsParser with DecimalMoneyParser
- [BC break] Moved
Money\Exception\ExceptiontoMoney\Exception - [BC break] UnkownCurrencyException is now DomainException instead of RuntimeException
- [Doctrine break] In
Currencythe private variablenamewas renamed tocode, which could break your Doctrine mapping if you are using embeddables or any other Reflection related implementation.
-
v3.0.0-beta421 Oct 2016 pre-releaseNothing published for this version
-
v3.0.0-beta.304 Oct 2016 pre-releaseRelease notes
Open source →Added
- FixedExchange: returns fixed exchange rates based on a list (array)
Changed
- [BC break] Convert method now moved to its own class: Converter
- [BC break] Exchange had one method getCurrencyPair which is now renamed to quote
- Minor documentation issues
Fixed
- Integer detection when the number overflows the integer type and contains zeros
- Rounding numbers containg trailing zeros
- Converting Money to currency with different number of subunits
-
v3.0.0-beta.203 Aug 2016 pre-releaseRelease notes
Open source →Added
- PHP Spec tests
- absolute method to Money and Calculator
- subunitFor method to Currencies
- Currencies now extends IteratorAggregate
- Library exceptions now implement a common interface
- Formatter and Parser implementation are now rounding half up
Changed
- [BC break] Dropped PHP 5.4 support
- [BC break] Intl and Bitcoin formatters and parsers now require Currencies
- ISOCurrencies now uses moneyphp/iso-currencies as currency data source
Fixed
- Documentation to be inline with upcoming version 3
- Rounding issues in calculators with negative numbers
- Formatting and parser issues for amounts and numbers with a trailing zero
- Improved many exception messages
- Registration of own Calculator implementations
-
v3.0.0-beta01 Mar 2016 pre-releaseRelease notes
Open source →Added
- Bitcoin parser and formatter
- Also checking tests folder for StyleCI
Fixed
- Currencies are now included in the repo
- Currency list generation moved to dev dependency: reduces repo size
- BC Math calculator adding and subtracting failed when bcscale was set
- Parsing zero for StringToUnitsParser
-
v3.0.0-alpha04 Feb 2016 pre-releaseRelease notes
Open source →Added
- Currency repositories (ISO currencies included)
- Money exchange (including Swap implementation)
- Money formatting (including intl formatter)
- Money parsing (including intl parser)
- Big integer support utilizing different, transparent calculation logic upon availability (bcmath, gmp, plain php)
- Money and Currency implements JsonSerializable
- Rounding up and down
- Allocation to N targets
Changed
- [BC break] Money::getAmount() returns a string instead of an int value
- [BC break] Moved stringToUnits to StringToUnitsParser parser
- Library requires at least PHP 5.4
- Library uses PSR-4
Fixed
- Integer overflow
Removed
- [BC break] UnkownCurrency exception
- [BC break] Currency list is now provided by umpirsky/currency-list
- [BC break] RoundingMode class
- [BC break] Announced deprecations are removed (Currency::getName, CurrencyPair::getRatio, Money::getUnits)
-
v1.3.016 Jan 2016Nothing published for this version
-
1.2.107 Oct 2014Nothing published for this version
-
1.2.012 Apr 2013Nothing published for this version
-
1.1.003 Aug 2012Nothing published for this version