jomweb/ringgit

基于 Money PHP 的马来西亚林吉特实现

v3.1.0 2024-03-31 13:34 UTC

README

tests Latest Stable Version Total Downloads Latest Unstable Version License Coverage Status

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());