lukam/money

Fowler的Money实现

0.1.0 2019-03-17 16:30 UTC

This package is auto-updated.

Last update: 2024-09-20 06:34:43 UTC


README

这是一个Fowler的Money模式的基本示例实现。该库使用货币的最小单位执行货币操作,以防止舍入错误。

<?php

use Money;

$euro = Money::eur(100);
$tenEuro = $euro + Money::eur(900);

print($tenEuro->format()); // 10,00 €

$shares = $tenEuro->allocate([1,1,1]);

print($shares[0]->format()); //3,34 €
print($shares[1]->format()); //3,33 €
print($shares[2]->format()); //3,33 €

用法

实例化

货币金额以货币的最小单位/分表示。(例如,100表示1欧元)。

$euro = Money::eur(100);

print($euro->getAmount()); // 100

操作

  • 加法

  • 减法

  • 乘法

  • 除法

加法

使用add方法将两个货币对象的金额相加。加法必须在具有相同货币的对象之间进行。

$fiveEuro = Money::eur(500);

$tenEuro = $fiveEuro->add($fiveEuro);

减法

使用subtract从两个货币对象中减去金额。减法必须在具有相同货币的对象之间进行。

$fiveEuro = Money::eur(500);

$zeroEuro = $fiveEuro->subtract($fiveEuro);

乘法

使用multiply方法进行乘法。

$fiveEuro = Money::eur(500);

$tenEuro = $fiveEuro->multiply(2);

除法

使用divide方法进行除法。

$tenEuro = Money::eur(500);

$fiveEuro = $tenEuro->divide(2);

分配

  • 分配

分配

根据提供的比例分配货币金额。剩余金额分配给具有最大比例的份额。

$tenEuro = Money::eur(1000);

$shares = $tenEuro->allocate([1,1,1]);

print($shares[0]->getAmount()); //334
print($shares[1]->getAmount()); //333
print($shares[2]->getAmount()); //333

比较

等于

使用equals方法比较两个货币对象。当金额或货币类型相同时,该方法将返回false。

$tenEuro = Money::eur(1000);
$oneEuro = Money::eur(100);
$oneDollar = Money::usd(100);

$oneEuro->equals($tenEuro); // false
$oneEuro->equals($oneDollar); // false

大于

使用greaterThan方法检查货币金额是否大于给定的货币金额。

$tenEuro = Money::eur(1000);
$oneEuro = Money::eur(100);

$tenEuro->greaterThan($oneEuro); // true

大于等于

使用greaterThanOrEqual方法检查货币金额是否大于或等于给定的货币金额。

$oneEuro = Money::eur(100);

$oneEuro->greaterThanOrEqual($oneEuro); // true

小于

使用lessThan方法检查货币金额是否小于给定的货币金额。

$tenEuro = Money::eur(1000);
$oneEuro = Money::eur(100);

$oneEuro->lessThan($tenEuro); // true

小于等于

使用lessThanOrEqual方法检查货币金额是否小于或等于给定的货币金额。

$oneEuro = Money::eur(100);

$oneEuro->lessThanOrEqual($oneEuro); // true

格式化

使用format方法格式化货币。

$oneEuro = Money::eur(100);

print($oneEuro->format()); // 1,00 €

测试

phpunit

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件。