danhunsaker / bcmath
PHP bcmath 作为静态类,具有多个增强功能。
v1.1.3
2017-05-29 21:12 UTC
Requires
- php: ^5.4|^7.0
- ext-bcmath: *
Requires (Dev)
- behat/behat: ^3.0
- henrikbjorn/phpspec-code-coverage: ^2.0|^1.0
- phpspec/phpspec: ^2.4
- phpunit/phpunit: ^4.0|^5.0
- rmiller/behat-spec: ^0.3
This package is auto-updated.
Last update: 2024-09-13 10:23:22 UTC
README
PHP bcmath 作为静态类,具有多个增强功能。
安装
使用 Composer
composer require danhunsaker/bcmath
用法
用法几乎与 bcmath 扩展函数 相同。主要区别在于,将 bc 前缀替换为 Danhunsaker\BC 类名(您可以通过 use Danhunsaker\BC 在您的项目(s)中轻松地别名)。
换句话说
bcadd()变为BC::add()bccomp()变为BC::comp()bcdiv()变为BC::div()bcmod()变为BC::mod()bcmul()变为BC::mul()bcpow()变为BC::pow()bcpowmod()变为BC::powmod()bcscale()变为BC::scale()bcsqrt()变为BC::sqrt()bcsub()变为BC::sub()
还有一些额外的便利方法,这些方法在扩展中不存在
BC::epow()将 e 的指数提升到参数的幂。BC::fact()计算参数的阶乘。BC::intval()如果有,截断参数的小数部分。BC::ln()给出参数的自然对数。BC::log()给出参数的 10 底对数(使用 ln $val/ln 10)。BC::max()返回数组中的最大值(第一个参数)。BC::min()返回数组中的最小值(第一个参数)。BC::modfrac()的行为与BC::mod()完全相同,但它将返回任何余数的分数部分以及整数部分。BC::powfrac()支持分数指数,允许计算除了平方根以外的根。BC::root()是BC::powfrac()的补充,实际上是它的便利包装器。BC::round()将值四舍五入到指定的刻度。
表达式解析器
还有 BC::parse(),它允许您将计算写成表达式而不是方法调用。它(目前)不支持通过方法调用提供的 所有 内容,但这计划在未来的版本中实现。目前,这里列出了哪些是支持的,以及如何在您的表达式中指定每个
BC::add(a, b)=>'a + b'BC::div(a, b)=>'a / b'BC::div(a, b, 0)=>'a \ b'BC::mod(a, b)=>'a % b'BC::modfrac(a, b)=>'a %% b'BC::mul(BC::div(a, b, 0), b)=>'a * b'BC::sub(a, BC::mod(a, b))=>'a -% b'BC::mul(a, b)=>'a * b'BC::pow(a, b)=>'a ** b'BC::powfrac(a, b)=>'a ^ b'BC::sub(a, b)=>'a - b'
还有一些逻辑表达式可用,它们将返回布尔值(真/假),而不是数字
BC::comp(a, b) == 0=>'a = b'或'a == b'BC::comp(a, b) == 1=>'a > b'BC::comp(a, b) == -1=>'a < b'BC::comp(a, b) >= 0=>'a >= b'BC::comp(a, b) <= 0=>'a <= b'BC::comp(a, b) != 0=>'a != b'或'a <> b'a and b=>'a & b'或'a && b'a or b=>'a | b'或'a || b'a xor b=>'a ~ b'或'a ~~ b'
表达式解析器识别括号,因此您可以按需使用它们来分组子表达式。它还支持变量
BC::parse('{m} * {x} + {b}', ['m' => 0.5, 'x' => 5, 'b' => 0]);
需要为您的表达式指定一个比例吗?没问题,只需将其作为第三个参数传递即可
BC::parse('{m} * {x} + {b}', ['m' => 0.5, 'x' => 5, 'b' => 0], 18);
当然,您可以通过传递 null 作为第二个参数来跳过变量列表
BC::parse('{m} * {x} + {b}', null, 18); // Any unrecognized variables are assumed to be zero, // so the above is the same as: BC::parse('0 * 0 + 0', null, 18);
贡献
欢迎在GitHub上随时进行贡献。
安全问题应直接通过电子邮件报告给Dan Hunsaker。