yuwuhsien/laravel-bcmath-cast
Composer 安装命令:
composer require yuwuhsien/laravel-bcmath-cast
包简介
Laravel Eloquent casts for PHP 8.4's BCMath\Number object API, enabling natural operator-based arithmetic on model attributes while maintaining arbitrary precision decimal accuracy.
README 文档
README
Laravel BCMath Cast
Laravel Eloquent casts for PHP 8.4's BCMath\Number object API, enabling natural operator-based arithmetic on model attributes while maintaining arbitrary precision decimal accuracy.
Why This Package?
PHP 8.4 introduced the BCMath\Number class with operator overloading, transforming cumbersome decimal calculations:
// Old way with BCMath functions $total = bcadd(bcmul($price, $quantity), $tax, 2); // New way with BCMath\Number $total = ($price * $quantity) + $tax;
This package bridges Laravel's Eloquent ORM with PHP 8.4's BCMath\Number, letting you write clean, precise arithmetic directly on model attributes.
Read more: BCMath Object API in PHP 8.4
Requirements
- PHP 8.4+ (for
BCMath\Numberclass) - Laravel 11+
Installation
composer require yuwuhsien/laravel-bcmath-cast
Usage
Basic Usage
Add the AsDecimal cast to your Eloquent model:
use YuWuHsien\Decimal\Casts\AsDecimal; class Product extends Model { protected function casts(): array { return [ 'price' => AsDecimal::class, 'cost' => AsDecimal::class, 'tax_rate' => AsDecimal::class, ]; } }
Now your model attributes are automatically converted to BCMath\Number objects:
$product = Product::create([ 'price' => '19.99', 'cost' => '12.50', 'tax_rate' => '0.0825', ]); // Attributes are BCMath\Number instances $product->price instanceof Number; // true // Perform precise calculations with natural operators $margin = $product->price - $product->cost; // Number('7.49') $marginPercent = ($margin / $product->cost) * new Number('100'); // Number('59.92') // Calculate total with tax $total = $product->price * (new Number('1') + $product->tax_rate); // Number('21.639175')
Setting Values
The cast accepts multiple input types:
// BCMath\Number objects $product->price = new Number('29.99'); // Numeric strings (recommended for precision) $product->price = '29.99'; // Integers $product->price = 30; // Floats (works but may lose precision - triggers warning) $product->price = 29.99; // ⚠️ Warning: precision loss possible
Database Column Types
Use DECIMAL columns, NOT FLOAT:
Schema::create('products', function (Blueprint $table) { $table->decimal('price', 10, 2); // ✅ Correct $table->decimal('cost', 10, 4); // ✅ Correct $table->float('amount'); // ❌ Wrong - loses precision });
The DECIMAL type preserves exact decimal values. Floats introduce rounding errors that defeat the purpose of BCMath.
Testing
# Run tests composer test # Run tests with coverage composer test-coverage # Run static analysis composer analyse
License
The MIT License (MIT). Please see License File for more information.
yuwuhsien/laravel-bcmath-cast 适用场景与选型建议
yuwuhsien/laravel-bcmath-cast 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2.44k 次下载、GitHub Stars 达 2, 最近一次更新时间为 2025 年 11 月 21 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「decimal」 「laravel」 「precision」 「bcmath」 「eloquent」 「cast」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 yuwuhsien/laravel-bcmath-cast 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 yuwuhsien/laravel-bcmath-cast 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 yuwuhsien/laravel-bcmath-cast 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Fork of krowinski/bcmath-extended with added nullable input arguments
Field for number with restricted count of digits and decimal places
gmp-based arbitrary precision operations on currency amounts "XXX.YY"; because floats are BAD for representing money
Safe number conversion between arbitrary bases.
PHP implementation of python's struct module.
A package for working with arbitrary precision numbers in Laravel.
统计信息
- 总下载量: 2.44k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 31
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-11-21