muvon/

kiss-money

Money操作逻辑的KISS实现

0.4.3 2021-07-11 12:54 UTC

This package is auto-updated.

Last update: 2024-09-11 12:19:31 UTC


README

使用KISS方式实现带有自配置货币的Money操作

简单用法

use Muvon\KISS\Money;
Money::init([
  'USD' => [
    'fraction' => 2
  ]
]);

$Money = Money::fromAmount('0.01', 'USD');

// If we want to create from minor amount
// $Money = Money::fromMinor('1', 'USD');
// Get amount
var_dump($Money->getAmount());

// Get minor amount aka Value
var_dump($Money->getValue());

方法

初始化

在使用Money对象之前,您需要使用您的货币配置它。

为此,只需在您的应用程序启动之前调用带有传递配置的Money::init()方法。

初始化对象的示例

use Muvon\KISS\Money;
$config = [
  'USD' => [
    'fraction' => 2
  ],
  'EUR' => [
    'fraction' => 2
  ]
];
Money::init($config);

从货币金额创建

您可以使用金额或值(称为小数金额)作为单个实例创建对象,也可以作为实例列表(数组)创建。

请看下面的示例用法,了解您如何创建对象。

$list = Money::fromAmounts(['1.01', '2.03'], 'USD');
// Dumps array of Money objects created from amounts
var_dump($list);

// Dumps single object from amount
var_dump(Money::fromAmount('1.01', 'USD'));

// You can do almost the same just from minor amount
// Using method fromValue and fromValues
// But passing minor amounts to them

数学操作

支持两个货币对象的操作 - 加法和减法。

示例

$one = Money::fromAmount('1.5', 'USD');
$two = Money::fromAmount('2.0', 'USD');

// Dumps "3.50"
var_dump($one->add($two));

// Dumps "0.50"
var_dump($two->sub($one));

您还可以使用mul和div方法进行乘法或除法。

示例

$usd = Money::fromAmount('1.5', 'USD');

// Dumps "3.00"
var_dump($usd->mul('2'));

// Dumps "0.75"
var_dump($usd->div('2'));

转换为另一个国家

库支持根据另一个国家提供的汇率从一个国家转换到另一个国家。

要转换,只需像示例中那样调用cnv方法。

示例

$xrp = Money::fromAmount('23.00243', 'XRP');
$rate = Money::fromAmount('0.51', 'USD'); // How much for 1 XRP

// Dumps "11.73"
var_dump($xrp->cnv($rate));

要使转换更简单,您还可以使用两个相同货币的对象创建您的汇率。

示例

$Source = Money::fromAmount('0.5', 'USD');
$Target = Money::fromAount('10', 'USD');

// Dumps object with rate "20"
var_dump(Money::rate($Source, $Target, 'XRP'));

比较操作

所有比较操作都采用类似bash的风格命名。

所有方法只有一个参数,应该传递 - 要与之比较的另一个Money对象。

示例

$one = Money::fromAmount('1.5', 'USD');
$two = Money::fromAmount('2', 'USD');

// Dumps false
var_dump($one->ge($two));

// Dumps true
var_dump($one->lt($two));

自我检查方法

您可以使用isPositive、isNegative、isZero等方法检查当前值。

示例

$usd = Money::fromAmount('1.5', 'USD');

// Dumps true
var_dump($usd->isPositive());

// Dumps false
var_dump($usd->isNegative());

// Dump false
var_dump($usd->isZero());

获取当前对象的信息

您可以使用以下方法获取对象当前状态及其值。所有方法都没有参数。

作为字符串使用

您可以将对象作为字符串使用。默认情况下,它返回Money::getAmount()方法的调用。

依赖关系

此库要求您安装bcmath和gmp扩展,并且PHP版本为8+。

此库没有其他代码依赖,尽可能保持简单。

测试覆盖率

  • 可以创建单个
  • 可以创建多个
  • 可以创建零
  • 不能没有配置创建
  • 添加减法操作
  • 乘除法操作
  • 计算汇率
  • 转换为另一种货币
  • 不能转换相同货币
  • 结果不可变
  • 比较操作
  • 不能添加或减去不同货币
  • 不能比较不同货币
  • 是正数
  • 是负数
  • 是零
  • 有货币
  • 可以作为字符串使用