英文:
How to compare amounts with PHP library brick/money
问题
I decided to use the PHP library brick/money for currency calculations, since it's too imprecise to use floats, and it's annoying to convert amounts to cents so you use integers only, and to make easier dealing with rounding. I didn't go with the money PHP library because it's not flexible and demands inputs to be in integer-ish form (and yeah, I'm lazy to make input/output wrappers and don't want to be debugging in cents).
我决定使用PHP库brick/money进行货币计算,因为使用浮点数太不精确,而且将金额转换为分以便仅使用整数并更容易处理舍入很烦人。我没有选择money PHP库,因为它不灵活,要求输入必须以整数形式提供(是的,我懒得创建输入/输出包装器,也不想在分方面进行调试)。
I'm noticing a tiny downside of using brick/money
since there isn't good documentation. I searched for a direct way to compare two amounts and this is a question I couldn't find an official/straightforward/direct form to do it.
我注意到使用brick/money
有一个小小的缺点,因为没有很好的文档。我搜索了一种直接比较两个金额的方法,但我没有找到官方/直接的方式来执行此操作。
So I have something like:
use Brick\Money\Money;
$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
因此,我有类似以下的代码:
use Brick\Money\Money;
$money1 = Money::of(50, 'MXN'); // MXN 50.00
$money1 = $money1->plus('10'); // MXN 60.00 -- 无论是什么操作
$money2 = Money::of(50, 'MXN'); // MXN 50.00
$money2 = $money1->minus('10'); // MXN 40.00 -- 无论是什么操作
Question:
How can I compare the two amounts in an easier way? Do I need to call ->getMinorAmount()->toInt()
for each comparison?
Do I need to do something like the following for basic validation?:
问题:
如何以更简单的方式比较这两个金额?我需要为每个比较调用->getMinorAmount()->toInt()
吗?
我是否需要执行以下类似的操作进行基本验证?:
if ($money1->getMinorAmount()->toInt() < 0 ||
$money1->getMinorAmount()->toInt() < $money2->getMinorAmount()->toInt()) {
$error = true;
}
Meanwhile in money PHP
you have functions like this:
$result = $value1->equals($value2);
$result = $value1->greaterThan($value2);
$result = $value1->greaterThanOrEqual($value2);
//etc...
与此同时,在money PHP
中,您可以使用类似这样的函数:
$result = $value1->equals($value2);
$result = $value1->greaterThan($value2);
$result = $value1->greaterThanOrEqual($value2);
//等等...
Is this a missing feature or am I missing something? Thanks in advance.
这是一个缺失的功能吗,还是我漏掉了什么?提前感谢。
英文:
I decided to use the PHP library brick/money for currency calculations, since it's too imprecise to use floats, and it's annoying to convert amounts to cents so you use integers only, and to make easier dealing with rounding. I didn't go with the money PHP library because it's not flexible and demands inputs to be in integer-ish form (and yeah, I'm lazy to make input/output wrappers and don't want to be debugging in cents).
I'm noticing a tiny downside of using brick/money
since there isn't good documentation. I searched for a direct way to compare two amounts and this is a question I couldn't find an official/straightforward/direct form to do it.
So I have something like:
use Brick\Money\Money;
$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
Question:
How can I compare the two amounts in an easier way? Do I need to call ->getMinorAmount()->toInt()
for each comparison?
Do I need to do something like the following for basic validation?:
if ($money1->getMinorAmount()->toInt() < 0 ||
$money1->getMinorAmount()->toInt() < $money2->getMinorAmount()->toInt()) {
$error = true;
}
Meanwhile in money PHP
you have functions like this:
$result = $value1->equals($value2);
$result = $value1->greaterThan($value2);
$result = $value1->greaterThanOrEqual($value2);
//etc...
Is this a missing feature or am I missing something? Thanks in advance.
答案1
得分: 1
在AbstractMoney
类中有类似的方法:
$result = $money1->isEqualTo($money2);
$result = $money1->isGreaterThan($money2);
$result = $money1->isGreaterThanOrEqualTo($money2);
...
英文:
There're similar methods in the AbstractMoney
class
$result = $money1->isEqualTo($money2);
$result = $money1->isGreaterThan($money2);
$result = $money1->isGreaterThanOrEqualTo($money2);
...
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论