Bc 是一款小型、简单但精确的计算工具。

1.0.0 2024-07-03 15:09 UTC

This package is auto-updated.

Last update: 2024-09-04 13:38:14 UTC


README

系统要求

  • php 8.1 或更高版本
  • php bcmath 扩展

Bc

Bc 是一款小型、简单但精确的计算工具。它内部使用 bcmath 函数。

你可以得到你想要的确切结果。

如果你有足够的内存,就没有四舍五入的问题。

就像用笔和纸加上你的手进行 N 位小数的计算。

为什么选择 Bc?

你认为下面的测试会通过吗?

it('shows that 0.1 + 0.2 = 0.3', function () {
    expect(0.1 + 0.2)->toBe(0.3);
});

不幸的是,在 php 中 0.1 + 0.2 不等于 0.3

它失败的原因如下

断言失败:0.30000000000000004 与 0.3 不相同。

这就是我为什么要这样做的原因。

使用示例

计算

给出一个 scale 值后,你可以依次计算。

(new Bc)->scale(2)->num('1')->add('2')->mul('3')->value(); // '9.00'

它也可以像下面这样使用

(new Bc('1'))->add(new Bc('2'))->mul(new Bc('3'))->value(); // '9'
(new Bc)->scale(2)->num((new Bc('1')))->add(new Bc('2'))->mul(new Bc('3'))->value(); // '9.00'

比较

给出一个 scale 值后,你可以进行比较。

// true for '10.00' > '1.00'
(new Bc)->scale(2)->num('10')
    ->isGreaterThan('1');

它也可以像下面这样使用

// true for '30.00' > '3.00'
(new Bc)->scale(2)->num('10')->add('20')
    ->isGreaterThan((new Bc)->scale(2)->num('1')->add('2'));

关于 num 方法

它指定了计算开始的数字。它始终返回 Bc 实例。

(new Bc)->num('1')

或者你可以使用下面的方法代替

(new Bc('1'))

关于 scale 方法

它指定了一个要传递给下一个操作的 scale 值。默认值为 0。

(new Bc)->num('1')->add('2')->value(); // '3'

它支持链式调用

// With scale 0, '1' + '2' = '3'
// With scale 2, '3.00' * '3.00' = '9.00'
(new Bc)->num('1')->add('2')->scale(2)->mul('3')->value(); // '9.00'

支持的计算方法

计算方法期望 stringBc 实例。并且它们始终返回 Bc 实例。

add

它添加一个数字

(new Bc)->num('1')->add('2')->value(); // '3'

sub

它减去一个数字

(new Bc)->num('2')->sub('1')->value(); // '1'

mul

它乘以一个数字

(new Bc)->num('2')->mul('3')->value(); // '6'

div

它除以一个数字

(new Bc)->num('6')->div('3')->value(); // '2'

mod

它计算一个数字的模

(new Bc)->num('10')->mod('7')->value(); // '3'

pow

它计算一个数字的幂

(new Bc)->num('2')->pow('3')->value(); // '8'

powmod

它计算一个数字的带模幂

(new Bc)->num('2')->powmod('5', '3')->value(); // '2'

sqrt

它计算一个数字的平方根

(new Bc)->num('9')->sqrt()->value(); // '3'

支持的比较方法

比较方法期望 stringBc 实例。并且它们始终返回 bool

isGreaterThan

它检查一个数字是否大于另一个数字

(new Bc)->num('10')->isGreaterThan('1'); // true

isGreaterThanOrEqual

它检查一个数字是否大于或等于另一个数字

(new Bc)->num('10')->isGreaterThanOrEqual('10'); // true

isLessThan

它检查一个数字是否小于另一个数字

(new Bc)->num('1')->isLessThan('10'); // true

isLessThanOrEqual

它检查一个数字是否小于或等于另一个数字

(new Bc)->num('10')->isLessThanOrEqual('10'); // true

isEqual

它检查一个数字是否等于另一个数字

(new Bc)->num('10')->isEqual('10'); // true

isDifferent

它检查一个数字是否不同于另一个数字

(new Bc)->num('10')->isDifferent('1'); // true

gt

isGreaterThan 相同

(new Bc)->num('10')->gt('1'); // true

gte

isGreaterThanOrEqual 相同

(new Bc)->num('10')->gte('10'); // true

lt

isLessThan 相同

(new Bc)->num('1')->lt('10'); // true

lte

isLessThanOrEqual 相同

(new Bc)->num('10')->lte('10'); // true

is

isEqual 相同

(new Bc)->num('10')->is('10'); // true

isNot

isDifferent 相同

(new Bc)->num('10')->isNot('1'); // true

运行时异常

ScaleCannotBeUsedForOperation

throw new \Tetthys\Bc\Exceptions\ScaleCannotBeUsedForOperation;

当 scale 小于 0 时抛出。

ValueCannotBeUsedForOperation

throw new \Tetthys\Bc\Exceptions\ValueCannotBeUsedForOperation;

当值不是数字时抛出。

如何在相同环境中贡献和测试?

docker-compose up

docker-compose up

将 shell 连接到 phptestenv 容器

bash ./run/shell/phptestenv.sh

使用 composer 安装依赖

composer install

运行测试

./vendor/bin/pest

或者,您可以使用以下命令从主机操作系统运行测试

bash ./run/test.sh

我想说的话

现在是 2024 年 6 月。

我仍在学习提交和分支命名规范以及PHP Composer规则。

即使有些命名不好,我希望你能理解。

谢谢。