php-collective / decimal-object
PHP 十进制处理作为值对象
1.2.1
2023-12-07 13:56 UTC
Requires
- php: >=8.1
- ext-bcmath: *
- ext-json: *
Requires (Dev)
- php-collective/code-sniffer: ^0.2.1
- phpstan/phpstan: ^1.0.0
- phpunit/phpunit: ^10.3.0
README
PHP 的十进制值对象。
背景
在处理十进制(例如货币)值时,像 int 或 float 这样的常规数据类型不适用于精确的算术。在 PHP 中尝试以下操作
var_dump(0.1 + 0.2); // float(0.3) var_dump(0.1 + 0.2 - 0.3); // float(5.5511151231258E-17)
将它们作为字符串处理是一种解决方案,但作为值对象,您可以更轻松地封装一些逻辑。
替代方案
类似于 php-decimal 的解决方案需要自定义 PHP 扩展(会使它更快,但也可能使某些服务器难以使用)。货币值本身也可以使用 brick/money 或 moneyphp/money 处理。
有关详细信息,请参阅 wiki。
注意:如果您正在寻找 pre PHP 8.1 版本,请查看 遗留库。
功能
- 对精度/比例要求非常严格。不会自行丢失有效数字。您需要手动
trim()
。 - 会话式 API(无 le、gt 方法)。
- 支持基本数学运算和检查。
- 不可变。
- 处理非常大的和非常小的数字。
安装
要求
bcmath
PHP 扩展已启用
Composer(首选)
composer require php-collective/decimal-object
使用
有关更多详细信息,请参阅 文档。
实现
以下库使用 Decimal
值对象
- dereuromark/cakephp-decimal 作为 CakePHP ORM 的十进制类型替代品。
此原始库于 2019 年为 Spryker 电子商务框架编写,自那时以来,经过数百万客户和订单以及其他复杂底层计算的考验。这里的是专门升级且独立维护的版本,适用于整个 PHP 生态系统。
祝您享受!