首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PHP 精度计算问题(精确算法)

PHP 精度计算问题(精确算法)

作者头像
很酷的站长
发布2022-12-28 15:55:09
发布2022-12-28 15:55:09
3.1K0
举报
1. PHP 中的精度计算问题


当使用 php 中的 +-*/ 计算浮点数时, 可能会遇到一些计算结果错误的问题

这个其实是计算机底层二进制无法精确表示浮点数的一个 bug, 是跨域语言的, 比如 js 中的 舍入误差

所以大部分语言都提供了用于精准计算的类库或函数库, 比如 php 中的 bc 高精确度函数库, js 中的 toFixed()

如下所示: 将计算结果浮点数 58 转为整数后结果是 57, 而不是 58

代码语言:javascript
复制
$result = 0.58 * 100;
var_dump(intval($result)); // 57

js 中的舍入误差: 0.1 + 0.2 的计算结果为 0.30000000000000004, 此时可以使用 toFixed() 函数处理, 使其返回正确的结果

2. PHP 中的 bc 高精确度函数库

常用的高精度函数

代码语言:javascript
复制
// 高精度加法
bcadd(string $num1, string $num2, int $scale = 0);
// 高精度减法
bcsub(string $num1, string $num2, int $scale = 0);
// 高精度乘法
bcmul(string $num1, string $num2, int $scale = 0);
// 高精度除法
bcdiv(string $num1, string $num2, int $scale = 0);
// 比较两个高精度数字
bccomp(string $num1, string $num2, int $scale = 0);

特别注意:

从 PHP7 开始, 很多框架中都使用了严格模式(比如: TP6), 在严格模式下, 函数实参和形参的数据类型必须一致

bc 系列函数库前两个参数要求是字符串类型, 第三个参数为可选参数, 用于设置结果中小数点后的小数位数, 返回值为字符串

3. 推荐文章

PHP 精度计算问题: https://www.cnblogs.com/xiezhi/p/5688029.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. PHP 中的精度计算问题
  • 2. PHP 中的 bc 高精确度函数库
  • 3. 推荐文章
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档