我决定使用PHP库brick/money进行货币计算,因为使用浮点数太不精确,而且将数量转换为美分很烦人,所以只使用整数,并且为了更容易处理四舍五入。我没有使用money PHP库,因为它不灵活,并且要求输入是整数形式的(是的,我懒得制作输入/输出包装器,不想以美分进行调试)。
我注意到使用brick/money
的一个小缺点,因为没有好的文档。我寻找一种直接的方法来比较两个金额,这是一个我找不到正式/直接/直接的形式来做的问题。
所以我有这样的东西:
use BrickMoneyMoney;
$money1 = Money::of(50, 'MXN'); // MXN 50.00
$money1 = $money1->plus('10'); // MXN 60.00 -- whatever operation
$money2 = Money::of(50, 'MXN'); // MXN 50.00
$money2 = $money1->minus('10'); // MXN 40.00 -- whatever operation
问题:如何比较中的两个金额?每次比较都需要调用->getMinorAmount()->toInt()
吗?我是否需要做一些类似下面的基本验证?:
if ($money1->getMinorAmount()->toInt() < 0 ||
$money1->getMinorAmount()->toInt() < $money2->getMinorAmount()->toInt()) {
$error = true;
}
同时在money PHP
你有这样的功能:
$result = $value1->equals($value2);
$result = $value1->greaterThan($value2);
$result = $value1->greaterThanOrEqual($value2);
//etc...
这是一个缺失的功能还是我错过了什么?提前谢谢。
在AbstractMoney
类中也有类似的方法
$result = $money1->isEqualTo($money2);
$result = $money1->isGreaterThan($money2);
$result = $money1->isGreaterThanOrEqualTo($money2);
...