sgiphp / money
一个用于存储不同货币的类库
dev-master
2015-03-12 13:10 UTC
Requires
- php: >=5.4
This package is not auto-updated.
Last update: 2024-09-14 17:04:48 UTC
README
此类(类)的目的是简化PHP中金钱的处理。您将能够执行类似以下操作
<?php $exManager = ExchangeManager::getInstance(); $exManager->add("BGN/EUR 0.5113"); echo $exManager->exchange("100 BGN", "EUR"); // "51.13 EUR" $someEur = new Money(51.13, "EUR"); echo $someEur->exchangeTo("BGN"); // "100.00 BGN"
那么,我们从
货币类
存在几种预定义的货币,这些实际上是所有定义为ISO标准的“真实”货币。要使用这些货币,您只需在构造函数中传递它们的3字符ISO 4217代码即可。
<?php $usd = new Currency("USD");
当然,您可以定义自己的货币或通过提供代码和精度来覆盖默认货币。您可以想象精度就像货币中有多少小单位(分)一样,将在Money类中进一步介绍。
<?php $bitcoin = new Currency("BTC", 10); $fulldollar = new Currency("USD", 0); // default USD are with precision of 2 (the cents in 1 dollar) // following will raise an UnknownCurrencyException, because LTC is not // in the ISO standard and Currency class doesn't know the precision of the LTC $litecoin = new Currency("LTC"); // so instead you MUST specify the precision. It's up to you what precision your application will use $litecoin = new Currency("LTC", 8);
仅使用Currency类本身可以做的并不多,所以让我们转到
金钱类
您可以通过多种方式创建金钱
<?php $price = new Money(99.99, new Currency("USD")); $price = new Money(99.99, "USD"); $price = new Money("99.99 USD");
它们之间没有区别。但是,如果您想创建自己的货币或覆盖现有的某些货币,您必须首先使用第一种形式或实例化将失败并引发UnknownCurrencyException
<?php $bitcoins = new Money(0.000123, new Currency("BTC", 10)); $bitcoins->getAmount(); // 0.000123 echo $bitcoins; // will output 0.0001230000 BTC
精度
现在关于在货币中定义的精度
<?php $price = new Money(123.45678901, new Currency("USD")); $price->getAmount(); // 123.46 echo $price; // will output "123.46 USD"
这是由于默认USD货币中定义的精度。请注意,第二个十进制数字不是5,而是6,因为四舍五入。
但如果你想要更多或少于十进制数字,你可以这样操作
<?php $usd = new Currency("USD", 0); $price = new Money(123.45678901, $usd); $price->getAmount(); // 123 echo $price; // will output "123 USD" $price = new Money(123.45678901, new Currency("USD", 5)); $price->getAmount() // 123.45679 echo $price; // will output "123.45679 USD"
比较
目前只有一个方法可以比较金钱
<?php $usd = new Money("100 USD"); $usd->isEqualTo(new Money("100 BGN")); // FALSE $usd->isEqualTo(new Money("99.99 USD")); // FALSE $usd->isEqualTo(new Money("100.00 USD")); // TRUE $usd->isEqualTo(new Money("100.001 USD")); // also returns TRUE due to the precision of the currency
转换(兑换)
您可以使用Money::exchange()
方法将金钱从一种货币兑换为另一种货币。请耐心阅读以下内容以了解如何操作。(我必须先完成readme))... @todo
汇率类
为了能够从一种货币转换为另一种货币,您必须指定这些货币的汇率。为此,您可以
<?php $rate = new ExchangeRate(new Currency("EUR"), new Currency("USD"), 1.25); // or $rate = new ExchangeRate("EUR", "USD", 1.25); // or even $rate = new ExchangeRate("EUR/USD 1.25");
现在您可以从一种货币兑换到另一种货币
<?php $eurXusd = new ExchangeRate("EUR/USD 1.25"); $usd = $eurXusd->exchange(100); // returns Money object echo $usd; // 125.00 USD // you can pass Money object $hundredEur = new Money("100 EUR"); $usd = $eurXusd->exchange($hundredEur); // back conversion echo $eurXusd->exchange($usd); // 100 EUR
invert()
方法用于交换货币和反转比率。新的比率可以通过getRate()
方法检索,货币通过getSourceCurrency()
和getTargetCurrency()
检索
<?php $eurXusd = new ExchangeRate("EUR/USD 1.25"); echo $eurXusd->getSourceCurrency(); // EUR $eurXusd->invert(); echo $eurXusd; // USD/EUR 0.8 echo $eurXusd->getSourceCurrency(); // USD