doxadoxa/money-lib

PHP的简单货币库。

v1.4.6 2020-07-22 16:32 UTC

README

Build Status

使用GMP实现的简单Fouler Money Pattern。您也可以使用此库进行加密货币。

如何安装

通过composer安装

composer require doxadoxa/money-lib

如何使用

基本

简单这样做

use Money\Currency;
use Money\Money;

$bitcoin = new Currency('BTC', 8);
$amount = Money::make( $bitcoin, 0.1858);
echo $amount->getAmount(); // (float) 0.1858
echo $amount->getStringAmount(); // (string) "18580000"

此外,您还可以从您想要的任何精度中获取货币

use Money\Currency;
use Money\Money;

$ethereum = new Currency('ETH', 18);
$amount = Money::make( $ethereum, 0.000000000000000005);
echo $amount->getAmount(); // (float) 5.0E-18
echo $amount->getStringAmount(); // (string) "5"

可用操作

您可以使用默认的数学运算符在货币空间上使用——加法和减法。所有操作都是副作用安全的。

use Money\Currency;
use Money\Money;

$ethereum = new Currency('ETH', 18);
$usd = new Currency('USD', 2);
$amount = Money::make( $ethereum, 0.05 );

// Add operation
$newAmount = $amount->add( Money::make( $ethereum, 0.005 ) );
echo $newAmount->getAmount(); // (float) 0.055

// Sub operation
$newAmount = $amount->sub( Money::make( $ethereum, 0.005 ) );
echo $newAmount->getAmount(); // (float) 0.045

// Comparisons
$amount = Money::make( $usd, 10 );
$newAmount = Money::make( $usd, 10);
$nullAmount = Money::make( $ethereum, 0);
$newNullAmount = Money::make( $usd, 0);

$amount->equals( $newAmount ); // (bool) true
$nullAmount->equals($newNullAmount); // (bool) true

$amount->strictEquals( $newAmount ); // (bool) true
$nullAmount->strictEquals($newNullAmount); // (bool) false

$newAmount = Money::make( $usd, 20 );
$amount->less( $newAmount ); // (bool) true
$amount->more( $newAmount ); // (bool) false

ISO4217

该库支持ISO4217货币的自动检测,以添加一些功能,如符号格式化(如将USD符号更改为$),货币的默认小数位数以及获取国家或全名等额外参数。您可以通过货币对象的getIso4217()方法访问ISO4217对象。

格式化输出

您可以通过将货币转换为字符串来简单地格式化您的货币,使用format方法。

use Money\Currency;
use Money\Money;

$usd = new Currency('USD');
$money = Money::make( $usd, 1000 );
echo $money->format();// $ 1,000.00

此外,您可以通过继承Formatter类并创建自己的格式来创建您自己的格式器。或者,您可以在格式化器构造函数中简单地更改格式。

use Money\Formatters\CurrencyFormatter;
use Money\Currency;
use Money\Money;

$usd = new Currency('USD');
$formatter = new CurrencyFormatter(":amount:symbol", '.', '', 0);
$usd->setFormatter( $formatter );
$money = Money::make( $usd, 1000);
echo $money->format(); // 1000$