macmotp/money

轻量级PHP库,用于处理货币

v0.4.1 2024-09-20 03:58 UTC

README

Latest Version on Packagist Total Downloads

用于在PHP中处理货币的库,简单且轻量

适用于任何电子商务、金融科技或需要💰的应用。

需求

  • PHP >= 8.2

安装

使用composer安装此包

composer require macmotp/money

用法

创建货币对象

use Macmotp\Money;
use Macmotp\Currency;

// Amounts are always in cents (or lowest minor unit)!
$amount = 100;

// All Currencies adopt ISO 4217 standard
$currency = Currency::USD;

// Create the object
$money = new Money($amount, $currency);
// or Money::make($amount, $currency)

echo $money->print();

// (string) '1.00$'

// Another example with Vietnamese Dong
$money = new Money(10000, Currency::VND);

echo $money->print();

// (string) '10 000₫'

基本方法列表

  • getAmount():返回以分表示的金额;
  • getAmountForHumans():返回以小数表示的金额;
  • getCurrencyCode():返回货币代码;
  • getCurrencySymbol():返回货币符号;
  • getCurrency():返回货币对象(作为Currency实现,而不是作为字符串);
  • clone():克隆整个对象;
  • zero():将金额设置为零;

如果您想打印任何货币属性,请查看格式类。 例如:如果您想获取货币代码,可以运行 $money->getCurrencyCode()

打印货币(在屏幕上,而不是实际打印)

use Macmotp\Money;
use Macmotp\Currency;

$money = new Money(12345, Currency::USD);

// Default format based on each currency

echo $money->print();

// (string) '123.45$'

// Override the default

echo $money->withCode() 
           ->withSpace()
           ->withoutDecimals()
           ->print();

// (string) '123 USD'

打印方法列表

  • toArray():将对象转换为数组;
  • withSymbol():打印符号而不是货币代码;
  • withoutSymbol():不打印符号和货币代码;
  • withCode():打印货币代码而不是代码;
  • withoutCode():不打印符号和货币代码;
  • withSymbolOnLeft():在左侧打印符号;
  • withSymbolOnRight():在右侧打印符号;
  • withCodeOnLeft():在左侧打印货币代码;
  • withCodeOnRight():在右侧打印货币代码;
  • withSpace():在金额和货币之间打印一个空格;
  • withoutSpace():不打印金额和货币之间的空格;
  • withoutDecimals():不打印金额的小数部分;
  • withDecimalSeparator(string $decimalSeparator):覆盖默认的十进制分隔符字符;
  • withThousandsSeparator(string $thousandsSeparator):覆盖默认的千位分隔符字符;
  • withNumberOfDecimals(int $numberOfDecimals):设置小数的精度;

使用货币进行计算

use Macmotp\Money;
use Macmotp\Currency;

$moneyOne = new Money(200, Currency::USD);
$moneyTwo = new Money(300, Currency::USD);

echo $moneyOne->add($moneyTwo);

// new Money(500, Currency::USD)

计算方法列表

  • add(Money $money);
  • subtract(Money $money);
  • multiply(float $factor, string $flat = '');
  • divide(float $factor, string $flat = '');
  • inPercentage(float $percentage, string $flat = '');
  • absolute();

聚合货币

use Macmotp\Money;
use Macmotp\Currency;

$moneyOne = new Money(200, Currency::USD);
$moneyTwo = new Money(300, Currency::USD);
$moneyThree = new Money(400, Currency::USD);

echo Money::max($moneyOne, $moneyTwo, $moneyThree);

// new Money(400, Currency::USD)

echo Money::avg($moneyOne, $moneyTwo, $moneyThree);

// new Money(300, Currency::USD)

聚合方法列表

  • min(Money ...$money):返回最小金额;
  • max(Money ...$money):返回最大金额;
  • avg(Money ...$money):返回平均值;
  • sum(Money ...$money):返回所有金额的总和;

比较货币

use Macmotp\Money;
use Macmotp\Currency;

$moneyOne = new Money(200, Currency::USD);
$moneyTwo = new Money(300, Currency::USD);

echo $moneyOne->isLessThan($moneyTwo);

// (bool) true

比较方法列表

  • isSameCurrency(Money ...$money);
  • isEqualTo(Money $money);
  • isGreaterThan(Money $money);
  • isGreaterThanOrEqualTo(Money $money);
  • isLessThan(Money $money);
  • isLessThanOrEqualTo(Money $money);
  • isPositive();
  • isNegative();
  • isZero();
  • isZeroOrPositive();
  • isZeroOrNegative();

包中的货币列表

use Macmotp\Money;

$list = Money::getAllCurrencies();
// This will return a Illuminate\Support\Collection

这些都是已实现货币

  • AED:阿联酋迪拉姆
  • AFN:阿富汗尼
  • ALL:阿尔巴尼亚列克
  • AMD:亚美尼亚德拉姆
  • ANG:荷属安的列斯盾
  • AOA:安哥拉宽扎
  • ARS:阿根廷比索
  • AUD:澳大利亚元
  • AWG: 阿鲁巴弗罗林
  • AZN: 阿塞拜疆马纳特
  • BAM: 波斯尼亚和黑塞哥维那可兑换马克
  • BBD: 巴巴多斯元
  • BDT: 孟加拉塔卡
  • BGN: 保加利亚列弗
  • BHD: 巴林第纳尔
  • BIF: 布隆迪法郎
  • BMD: 百慕大元
  • BND: 文莱元
  • BOB: 玻利维亚诺
  • BRL: 巴西雷亚尔
  • BSD: 巴哈马元
  • BTC: 比特币
  • BTN: 不丹努尔特鲁姆
  • BWP: 博茨瓦纳普拉
  • BYN: 白俄罗斯卢布
  • BZD: 伯利兹元
  • CAD: 加拿大元
  • CDF: 刚果法郎
  • CHF: 瑞士法郎
  • CLP: 智利比索
  • CNY: 中国元 - 人民币
  • COP: 哥伦比亚比索
  • CRC: 哥斯达黎加科朗
  • CUP: 古巴比索
  • CVE: 佛得角埃斯库多
  • CZK: 捷克克朗
  • DJF: 吉布提法郎
  • DKK: 丹麦克朗
  • DOP: 多米尼加比索
  • DZD: 阿尔及利亚第纳尔
  • EGP: 埃及镑
  • ERN: 厄立特里亚纳克法
  • ETB: 埃塞俄比亚比尔
  • EUR: 欧元
  • FJD: 斐济元
  • FKP: 福克兰群岛镑
  • GBP: 英镑
  • GEL: 格鲁吉亚拉里
  • GHS: 加纳塞地
  • GIP: 直布罗陀镑
  • GMD: 冈比亚达拉西
  • GNF: 几内亚法郎
  • GTQ: 危地马拉格查尔
  • GYD: 圭亚那元
  • HKD: 香港元
  • HNL: 洪都拉斯伦皮拉
  • HTG: 海地古德
  • HUF: 匈牙利福林
  • IDR: 印尼盾
  • ILS: 以色列新谢克尔
  • INR: 印度卢比
  • IQD: 伊拉克第纳尔
  • IRR: 伊朗里亚尔
  • ISK: 冰岛克朗
  • JMD: 牙买加元
  • JOD: 约旦第纳尔
  • JPY: 日元
  • KES: 肯尼亚先令
  • KGS: 吉尔吉斯斯坦索姆
  • KHR: 柬埔寨瑞尔
  • KMF: 科摩罗法郎
  • KPW: 朝鲜元
  • KRW: 韩元
  • KWD: 科威特第纳尔
  • KYD: 开曼群岛元
  • KZT: 哈萨克斯坦坚戈
  • LAK: 老挝基普
  • LBP: 黎巴嫩镑
  • LKR: 斯里兰卡卢比
  • LRD: 利比里亚元
  • LSL: 莱索托洛蒂
  • LYD: 利比亚第纳尔
  • MAD: 摩洛哥迪拉姆
  • MDL: 摩尔多瓦列伊
  • MGA: 马达加斯加阿里亚里
  • MKD: 马其顿第纳尔
  • MMK: 缅甸元
  • MNT: 蒙古图格里克
  • MOP: 澳门元
  • MRU: 毛里塔尼亚乌吉亚
  • MUR: 毛里求斯卢比
  • MVR: 马尔代夫拉菲亚
  • MWK: 马拉维克瓦查
  • MXN: 墨西哥比索
  • MYR: 马来西亚林吉特
  • MZN: 莫桑比克梅蒂卡尔
  • NAD: 纳米比亚元
  • NGN: 尼日利亚奈拉
  • NIO: 尼加拉瓜科多巴
  • NOK: 挪威克朗
  • NPR: 尼泊尔卢比
  • NZD: 新西兰元
  • OMR: 阿曼里亚尔
  • PAB: 巴拿马巴波亚
  • PEN: 秘鲁索尔
  • PGK: 巴布亚新几内亚基那
  • PHP: 菲律宾比索
  • PKR: 巴基斯坦卢比
  • PLN: 波兰兹罗提
  • PYG: 巴拉圭瓜拉尼
  • QAR: 卡塔尔里亚尔
  • RON: 罗马尼亚列伊
  • RSD: 塞尔维亚第纳尔
  • RUB: 俄罗斯卢布
  • RWF: 卢旺达法郎
  • SAR: 沙特里亚尔
  • SBD: 所罗门群岛元
  • SCR: 塞舌尔卢比
  • SDG: 苏丹镑
  • SEK: 瑞典克朗
  • SGD: 新加坡元
  • SHP: 圣赫勒拿镑
  • SLE: 塞拉利昂利昂
  • SOS: 索马里先令
  • SRD: 苏里南元
  • SSP: 南苏丹镑
  • STN: 圣多美和普林西比多布拉
  • SYP: 叙利亚镑
  • SZL: 斯威士兰里兰吉尼
  • THB: 泰铢
  • TJS: 塔吉克斯坦索莫尼
  • TMT: 土库曼斯坦马纳特
  • TND: 突尼斯第纳尔
  • TOP: 汤加潘加
  • TRY: 土耳其里拉
  • TTD: 特立尼达和多巴哥元
  • TWD: 新台币
  • TZS: 坦桑尼亚先令
  • UAH: 乌克兰格里夫纳
  • UGX: 乌干达先令
  • USD: 美元
  • UYU: 乌拉圭比索
  • UZS: 乌兹别克斯坦苏姆
  • VES: 委内瑞拉主权玻利瓦尔
  • VND: 越南盾
  • VUV: 瓦努阿图瓦图
  • WST: 萨摩亚塔拉
  • XAF: 中非金融合作法郎
  • XCD: 东加勒比元
  • XOF: 西非金融合作法郎
  • XPF: 太平洋法郎
  • YER: 也门里亚尔
  • ZAR: 南非兰特
  • ZMW: 赞比亚克瓦查
  • ZWG: 津巴布韦金元

如果您想添加另一种货币,请提交一个issue。

测试

composer test

变更日志

请参阅变更日志,了解最近的变化。

贡献

请参阅贡献指南以获取详细信息。

安全漏洞

请查看我们的安全政策,了解如何报告安全漏洞。

鸣谢

许可

MIT许可(MIT)。请参阅许可文件获取更多信息。