Mathias Verraes 实现的 Fowler 的 Money 模式的 PHP 实现

1.2.0 2013-04-12 23:10 UTC

This package is not auto-updated.

Last update: 2024-09-28 15:28:55 UTC


README

Mathias Verraes 实现的 Fowley 的 money 模式 分支。

当前版本的分支通过在 Money 构造函数中使用浮点数作为参数与 Fowley 的模式分离。这是为了解决在 32 位平台上大型货币实体溢出 PHP int 大小的问题。这个问题将在本分支的后续版本中解决,因此请期待在次要版本上的 API 破坏。

PHP 5.3+ 库,使处理货币更安全、更简单、更有趣!

"如果我每次看到有人用 FLOAT 存储货币就有一分钱,我就会有 999.997634 美元" -- Bill Karwin

简而言之:你不应该用浮点数表示货币值。无论何时需要表示货币,都应使用此 Money 值对象。

<?php

use Money\Money;

$fiveEur = Money::EUR(5);
$tenEur = $fiveEur->add($fiveEur);

list($part1, $part2, $part3) = $tenEur->allocate(array(1, 1, 1));
assert($part1->equals(Money::EUR(334)));
assert($part2->equals(Money::EUR(333)));
assert($part3->equals(Money::EUR(333)));

文档可在 http://money.readthedocs.org 查阅

安装

使用 composer 安装库。将以下内容添加到您的 composer.json

{
    "require": {
        "hemeragestao/money": "dev-master"
    },
    "minimum-stability": "dev"    
}

现在运行 install 命令。

$ composer.phar install

新增功能

此分支用 Ruby 的 Money 映射中的数据替换了从 openexchangerates.org 的简单 ISO 4217 映射。这增加了一些附加功能,包括为 Money 对象生成格式化的输出字符串。此外,Money 对象构造函数接受一个浮点数参数,并将其用作金额而不是单位。这将在后续版本中更改。

<?php

use Money\Money;

echo Money::EUR(5.32)->formattedString();

输出

€ 5.32

集成

请参阅 MoneyBundleTbbcMoneyBundle 以实现 Symfony 集成