nilz/money

此包已被 废弃 且不再维护。未建议任何替代包。

货币类的实现

1.10 2023-10-20 13:50 UTC

This package is auto-updated.

Last update: 2024-08-20 15:32:11 UTC


README

使用最小货币单位整数进行计算的扩展货币对象的实际应用实现

创建此库的原因是其他现有解决方案存在以下一个或多个缺点:

  • 缺少Money类的扩展性
  • 依赖于固定的货币类
  • 缺少如格式化和转换货币的方法
  • 实现中的错误导致四舍五入错误和在例如累加价格时缺少分
  • 库不再维护

免费使用。使用它或放弃它。

示例

创建货币对象

use Nilz\Money\Money;
use Nilz\Money\Currency\ISO4217Currency;

$money = new Money(420, new ISO4217Currency('EUR'));

$money = Money::fromDefaultUnitAmount('4.20', 'EUR');

获取货币对象的金额

//420
echo $money->getAmount();

//4.20
echo $money->getDefaultUnitAmount();

//4,20 €
echo $money->getFormattedAmount('de_DE');

累加两个货币对象

$a = Money::fromDefaultUnitAmount('4.20', 'EUR');
$b = Money::fromDefaultUnitAmount('2.10', 'EUR');

$c = $a->add($b);

//6.30
echo $c->getAmount();

//4.20
echo $a->getAmount();

//2.10
echo $b->getAmount();

其他算术示例

$a = Money::fromDefaultUnitAmount('4.20', 'EUR');
$b = Money::fromDefaultUnitAmount('2.10', 'EUR');

$a->subtract($b);

$a->multiply(1.2);
$a->divide(1.2);

如果您需要其他方法进行计算,可以轻松扩展货币对象或提交一个扩展它的pull request。

使用自定义货币

use Nilz\Money\Currency\Currency;

//alpha3 code, factor for smallest unit representation, decimal digits to round two
$money = new Money(420, new Currency('EUR', 100, 2));

您也可以通过实现CurrencyInterface来实现自定义货币对象。