ZetCode

Brick/Math 库

最后修改于 2025 年 3 月 19 日

Brick/Math 是一个 PHP 库,用于任意精度算术运算。它允许您使用大数进行精确计算,避免了 PHP 自身的整数和浮点数类型的限制。本教程涵盖了使用 Brick/Math 的基础知识,包括安装、基本操作和高级功能。

安装

要使用 Brick/Math,请通过 Composer 安装它。在您的项目目录中运行以下命令

composer require brick/math

此命令在您的项目中安装 Brick/Math 库。

基本用法

Brick/Math 提供了 BigIntegerBigDecimal 类,分别用于处理大整数和十进制数。

basic_usage.php
<?php

declare(strict_types=1);

require 'vendor/autoload.php';

use Brick\Math\BigInteger;
use Brick\Math\BigDecimal;

$bigInt = BigInteger::of('12345678901234567890');
$bigDec = BigDecimal::of('1234567890.1234567890');

echo "BigInteger: " . $bigInt->toString() . "\n";
echo "BigDecimal: " . $bigDec->toString() . "\n";

此示例演示了如何使用 Brick/Math 创建和显示大数。它使用 BigInteger 表示一个巨大的整数,使用 BigDecimal 表示一个精确的十进制数。

of 方法将字符串转换为这些类型,避免了 PHP 的原生类型限制。toString 方法将数字作为字符串输出,确保在显示过程中不会丢失精度。

算术运算

Brick/Math 支持基本算术运算,例如加法、减法、乘法和除法。

arithmetic_operations.php
<?php

declare(strict_types=1);

require 'vendor/autoload.php';

use Brick\Math\BigInteger;

$a = BigInteger::of('12345678901234567890');
$b = BigInteger::of('98765432109876543210');

$sum = $a->plus($b);
$diff = $a->minus($b);
$product = $a->multipliedBy($b);
$quotient = $a->dividedBy($b);

echo "Sum: " . $sum->toString() . "\n";
echo "Difference: " . $diff->toString() . "\n";
echo "Product: " . $product->toString() . "\n";
echo "Quotient: " . $quotient->toString() . "\n";

此代码使用 BigInteger 对两个大整数执行基本算术运算。它计算它们的和、差、积和商。

plusminusmultipliedBydividedBy 等方法处理运算,而不会损失精度。结果是新的 BigInteger 对象,通过 toString 显示。

十进制精度

BigDecimal 类允许您控制十进制计算的精度和舍入模式。

decimal_precision.php
<?php

declare(strict_types=1);

require 'vendor/autoload.php';

use Brick\Math\BigDecimal;
use Brick\Math\RoundingMode;

$a = BigDecimal::of('10');
$b = BigDecimal::of('3');

$result = $a->dividedBy($b, 10, RoundingMode::HALF_UP);

echo "Result: " . $result->toString() . "\n";

此示例使用 BigDecimal 以受控精度将 10 除以 3。它将小数位设置为 10 位,并使用 HALF_UP 舍入。

dividedBy 方法接受除数、小数位数和舍入模式。在这里,它产生 "3.3333333333",避免了 PHP 本机类型中常见的浮点错误。

比较操作

Brick/Math 提供了用于比较数字的方法,例如 isEqualToisGreaterThanisLessThan

comparison_operations.php
<?php

declare(strict_types=1);

require 'vendor/autoload.php';

use Brick\Math\BigInteger;

$a = BigInteger::of('12345678901234567890');
$b = BigInteger::of('98765432109876543210');

if ($a->isLessThan($b)) {
    echo "$a is less than $b\n";
} else {
    echo "$a is not less than $b\n";
}

此代码比较两个 BigInteger 值以检查它们的顺序。它使用 isLessThan 确定一个是否小于另一个。

比较方法返回布尔值,非常适合条件逻辑。在这里,它正确地输出 12345678901234567890 小于 98765432109876543210。

高级功能

Brick/Math 还支持高级功能,例如模算术、求幂和阶乘计算。

advanced_features.php
<?php

declare(strict_types=1);

require 'vendor/autoload.php';

use Brick\Math\BigInteger;

$a = BigInteger::of('12345678901234567890');
$b = BigInteger::of('98765432109876543210');

$mod = $a->mod($b);
$power = $a->power(3);
$factorial = BigInteger::of(100)->factorial();

echo "Modulus: " . $mod->toString() . "\n";
echo "Power: " . $power->toString() . "\n";
echo "Factorial: " . $factorial->toString() . "\n";

此示例展示了高级的 BigInteger 运算:模运算、求幂和阶乘。它使用大数来演示功能。

mod 方法计算 $a 除以 $b 的余数。power 方法将 $a 提升到 3 次方,而 factorial 计算 100!,所有这些都具有精确的精度。

这些运算在需要精度和大数的密码学、科学计算或金融应用程序中很有用。结果以字符串形式输出,以提高可读性。

Brick/Math 的最佳实践

来源

Brick/Math GitHub 存储库

在本教程中,我们探讨了如何在 PHP 中使用 Brick/Math 库进行任意精度算术运算。Brick/Math 提供了强大的工具,用于使用大数执行精确计算,使其非常适合金融、科学和加密应用程序。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有多年的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我写了 1400 多篇文章和 8 本电子书。我有超过八年的编程教学经验。

列出 所有 PHP 教程