jomweb / ringgit
基于 Money PHP 的马来西亚林吉特实现
v3.1.0
2024-03-31 13:34 UTC
Requires
- php: >=8.0.0 <8.4.0
- moneyphp/money: ^4.0
Requires (Dev)
- laravel/pint: ^1.1
- phpstan/phpstan: ^1.10.5
- phpunit/phpunit: ^9.6
README
PHP 8.0+ 库,使马来西亚林吉特的工作更安全、更简单、更有趣!
"如果每当我看到有人用 FLOAT 存储货币时,我就会得到 $999.997634" -- Bill Karwin
简而言之:你不应该用浮点数表示货币值。无论何时需要表示货币,请使用此 Money 值对象。
<?php use Duit\MYR; $fiveMyr = MYR::given(500); $tenMyr = $fiveMyr->add($fiveMyr); list($part1, $part2, $part3) = $tenMyr->allocate(array(1, 1, 1)); assert($part1->equals(MYR::given(334))); assert($part2->equals(MYR::given(333))); assert($part3->equals(MYR::given(333)));
安装
要通过 composer 安装,只需在您的 composer.json
文件中添加以下内容
{ "require": { "jomweb/ringgit": "^2.0" } }
然后从终端运行 composer install
。
快速安装
上述安装也可以通过以下命令简化
composer require "jomweb/ringgit"
用法
税收
GST 声明
无 GST
无 GST(零)声明货币(MYR)。
use Duit\MYR; $money = new MYR(540); $money = MYR::given(540); $money = MYR::withoutGst(540); $money = MYR::withoutTax(540);
在 GST 之前
在应用 GST 之前声明货币(MYR)。
use Duit\MYR; use Duit\Taxable\Gst\ZeroRate; use Duit\Taxable\Gst\StandardRate; $money = MYR::beforeGst(540); $money = MYR::beforeTax(540, new StandardRate()); $money = MYR::beforeTax(540, new ZeroRate()); $money = MYR::given(540)->useGstStandardRate(); // 6% $money = MYR::given(540)->useGstZeroRate(); // 0% $money = MYR::given(540)->enableTax(new StandardRate()); $money = MYR::given(540)->enableTax(new ZeroRate());
在 GST 之后
声明带有 GST 金额的货币(MYR)。
use Duit\MYR; use Duit\Taxable\Gst\ZeroRate; use Duit\Taxable\Gst\StandardRate; $money = MYR::afterGst(530); // always going to use 6% $money = MYR::afterTax(540, new StandardRate()); $money = MYR::afterTax(540, new ZeroRate());
SST 声明
无 SST
无 GST(零)声明货币(MYR)。
use Duit\MYR; $money = new MYR(540); $money = MYR::given(540); $money = MYR::withoutTax(540);
在 SST 之前
在应用 SST 之前声明货币(MYR)。
use Duit\MYR; use Duit\Taxable\Sst; $money = MYR::beforeTax(530, new Sst()); $money = MYR::given(530)->enableTax(new Sst());
在 SST 之后
带有 SST 税的货币(MYR)声明。
use Duit\MYR; use Duit\Taxable\Sst; $money = MYR::afterTax(530, new Sst());