Call to undefined function bcadd()

8 篇文章 0 订阅

先介绍一下当前使用的环境。同学们可以比较一下,看本篇文章是否可以提供帮助。

docker 部署

  • nginx 1.24
  • php 8.1-fpm

再介绍一下框架,使用的是 "laravel 9.33.0"

其实这里跟 laravel 框架和 nginx 是没太多关系的,因为我们主要是使用 php 的扩展函数 bcmath

主要就是列出来,好区分一下环境,了解更多。或许有时候 就会存在一些我们认为不可能,结果就是如此的事情。

bc函数,除了 bcadd 还有其他的, bcadd 的意思是指 两个数字 相加,那么有相加,就有相减,相乘,相除...

先将相关的 bc函数 列出来

  • bcadd 两个任意精度数字相加
  • bccomp 比较两个任意精度的数字,结果 1,0,-1
  • bcdiv 两个任意精度的数字除法计算
  • bcmod 对一个任意精度数字取模
  • bcmul 两个任意精度数字乘法计算
  • bcpow 任意精度数字的乘方
  • bcpowmod 先乘方,再取模
  • bcscale 设置所有bc数学函数的默认小数点保留位数
  • bcsqrt 任意精度数字的二次方根
  • bcsub 两个任意精度数字相减

场景:

我在做 订单金额 计算的时候,考虑到精度问题,如果用常规的 100 + 20 - 7 这种,或许会出现一些精度问题,因为以前就遇到过。我明明计算并且返回的数据是 某金额 比如是 9.99元,json 数据返回给前端时,结果就出现 9.999999998 这样的数据给到前端了。前端不知所措,我更加不知所措。 原因是因为 编程语言对浮点数和大整数的运算,表示,存储方面都存在一定的问题。

所以,出现了 bcmath 

关于 bcmath (Binary Calculator)

对于任意精度的数学,PHP提供了支持用字符串表示的任意大小和精度的数字的二进制计算,最多为 2147483647-1(或0x7FFFFFFF-1)。

那么我们就看一下 phpinfo 信息,配置是否支持。

 很不巧,并没有 bcmath 相关的,所以我们在代码里使用 bcadd() 时,就会出现这样的错误:

Call to undefined function bcadd()

"Call to undefined function bcadd()" 翻译过来就是 "调用未定义函数 bcadd()"

我们需要解决的是,安装下载 bcmath 扩展包,这样就可以了。

因为用的是 docker,所以步骤如下:

1. 进入容器

docker exec -it CONTAINER ID bash

CONTAINER ID  这是容器的ID,也可以填写容器名称

查看容器 ID 和容器名称的命令:

docker ps

2. 执行安装

docker-php-ext-install -j$(nproc) bcmath

3. 退出容器,重启容器

exit

docker restart CONTAINER ID

然后我们再返回 phpinfo 查看一下

现在就能找到 bcmath 相关的了。

然后我们回到代码里,之前运行 bcadd 时,出现过 "Call to undefined function bcadd()"

那么我们现在执行看一下:

到此 就解决了 "Call to undefined function bcadd()" 的问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值