fintara / calculator-php
算术表达式计算器
2.0.1
2022-04-13 17:07 UTC
Requires
- php: >=7.1
Requires (Dev)
- phpunit/phpunit: ^6.2
This package is not auto-updated.
Last update: 2024-09-26 15:37:24 UTC
README
PHP算术表达式计算器
2+5.9 = 7.9
3.5^(2-5) = 0.02332361516035
5-(2*(1+2)) = -1
默认包含的函数有 sqrt(x)
和 log(base, arg)
,也可以添加任何参数数量的自定义函数。
基本用法
use \Fintara\Tools\Calculator\Calculator; $calculator = Calculator::create(); // use default tokenizer echo $calculator->calculate('1+2*3/4'); // 2.5
高级用法
自定义函数
您可以添加自定义函数
name
: 函数名,将在表达式中使用。所有字符均为小写和 _ (下划线)。implementation
: 如何评估函数。
$calculator->addFunction('cbrt', function($x) { return pow($x, 1/3); }); echo $calculator->calculate('cbrt(27)'); // 3
标记化器
您也可以使用标记化器(或提供自己的计算器)
$tokenizer = new Tokenizer(); $tokens = $tokenizer->tokenize('1+2*3.5'); // [1, '+', 2, '*', 3.5]
如果表达式包含函数(例如 sqrt(x)
),标记化器需要知道所有函数的名称作为第二个参数。
$tokens = $tokenizer->tokenize('1+sqrt(4)', ['sqrt']); // [1, '+', 'sqrt', '(', 4, ')']
注意: 默认标记化器会在数字和后面的函数之间或数字和后面的括号之间自动添加 *
(乘法)符号(如果找不到符号)。
$tokens = $tokenizer->tokenize('2 (1 + 3)'); // [2, '*', '(', 1, '+', 3, ')']
变更日志
2.0.1
- 添加了 LICENSE
2.0.0
- 重大变更:操作符
mod
重命名为%
。 - 重大变更:
addFunction
不再需要参数数量(移除了第三个参数)。 - 重大变更:添加具有现有名称的函数会引发错误。您可以使用辅助函数
replaceFunction
。 - 重大变更:
getReversePolishNotation
是私有的。 - 重大变更:移除了
setExpression
。直接使用calculate($expression)
。 - 重大变更:
ILexer
和DefaultLexer
分别替换为TokenizerInterface
和Tokenizer
。