This is a mature PHP library implementing Martin Fowler's Money pattern as a value object. It provides a `Money` class that stores amounts as numeric strings in the smallest currency unit (e.g., cents), ensuring precision and avoiding floating-point errors. The library includes a rich set of features: arithmetic operations (add, subtract, multiply, divide, mod), comparison, allocation (by ratios or to N targets), aggregation (min, max, avg, sum), formatting (decimal, Intl, Bitcoin), parsing (decimal, Intl, Bitcoin), currency conversion via exchange rate providers (FixedExchange, Swap, Exchanger, IndirectExchange), and a `Teller` facade for migrating legacy float-based code. It supports multiple currency repositories (ISO 4217, Bitcoin, crypto-currencies from Binance) and offers pluggable calculators (BCMath required, GMP optional). The architecture is interface-driven with clean separation of concerns, extensive test coverage, and static analysis integration. It is not a data research project; it is a pure application library for monetary value handling.
Brick\Money is a high-quality, immutable PHP library for representing monetary values, performing arithmetic, currency conversion, allocation, and locale-aware formatting. It provides exact arithmetic via brick/math, supports multiple contexts (default, cash rounding, custom scale, auto-scale), and includes a rich set of exchange rate providers (configurable, PDO-backed, cached, chained, base-currency derived). The library features a strategy pattern for allocation (five algorithms including Hamilton's method) and cross-currency comparison. It is thoroughly tested, type-safe, and follows modern PHP practices (PHP 8.2+, readonly classes, enums, sealed interfaces). The codebase demonstrates strong software craftsmanship with clean abstractions, immutable value objects, and well-isolated components. It is actively maintained with regular releases and comprehensive documentation.
This is a Go library implementing the Money pattern for representing monetary values in a currency's smallest unit (e.g., cents). It provides precise arithmetic operations (addition, subtraction, multiplication, rounding), allocation and splitting of amounts without floating-point rounding errors, and formatting to human-readable strings with currency symbols and separators. The library includes a comprehensive set of ISO 4217 currency definitions, supports JSON serialization/deserialization with customizable marshal/unmarshal functions, and integrates with database/sql via Scanner and Valuer interfaces for storing monetary values in relational databases. It has no external dependencies beyond the Go standard library, making it lightweight and easy to embed. The architecture is a simple library with clear separation of concerns: a calculator for arithmetic, a formatter for display, a currency registry, and the core Money struct that composes these components.
This repository is a PHP library for creating and parsing HAL (Hypertext Application Language) documents in JSON and XML formats. It provides a fluent API to build HAL resources with links, embedded resources, and data, and render them to HAL+JSON or HAL+XML. The library also includes factories to parse HAL documents back into PHP objects. The architecture centers around the Hal class as the main resource representation, with separate renderers for JSON and XML, and link/resource containers. Key entry points are the Hal constructor, static fromJson/fromXml methods, and rendering methods asJson/asXml. The library has no external dependencies beyond PSR Link and PHP 8.2+, and is actively maintained with CI testing across multiple PHP versions.