danhunsaker/bcmath

PHP bcmath 作为静态类,具有多个增强功能。

v1.1.3 2017-05-29 21:12 UTC

This package is auto-updated.

Last update: 2024-09-13 10:23:22 UTC


README

Software License Gitter

Latest Version Build Status Codecov Total Downloads

PHP bcmath 作为静态类,具有多个增强功能。

安装

使用 Composer

composer require danhunsaker/bcmath

用法

用法几乎与 bcmath 扩展函数 相同。主要区别在于,将 bc 前缀替换为 Danhunsaker\BC 类名(您可以通过 use Danhunsaker\BC 在您的项目(s)中轻松地别名)。

换句话说

还有一些额外的便利方法,这些方法在扩展中不存在

  • 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