PHP 精度计算问题(精确算法)
2024-09-20
18
1. PHP 中的精度计算问题
当使用 php 中的 +-*/
计算浮点数时, 可能会遇到一些计算结果错误的问题
这个其实是计算机底层二进制无法精确表示浮点数的一个 bug, 是跨域语言的, 比如 js 中的 舍入误差
所以大部分语言都提供了用于精准计算的类库或函数库, 比如 php 中的 bc 高精确度函数库, js 中的 toFixed()
如下所示: 将计算结果浮点数 58 转为整数后结果是 57, 而不是 58
$result = 0.58 * 100;
var_dump(intval($result)); // 57
js 中的舍入误差: 0.1 + 0.2 的计算结果为 0.30000000000000004, 此时可以使用 toFixed()
函数处理, 使其返回正确的结果
2. PHP 中的 bc 高精确度函数库
常用的高精度函数
// 高精度加法
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
更新于:24天前赞一波!
相关文章
- 【说站】php解析json数据
- 【说站】php返回json数据
- 【说站】php数组赋值方式
- 【说站】php包含字符
- 【说站】php数组交集函数
- 【说站】php文件怎么在浏览器运行
- 【说站】php文件用什么软件打开
- 【说站】php文件怎么运行
- docker 怎么部署 php 应用
- php语法技巧代码实例
- PHP学习的技巧和学习的要素总结
- PHP平滑关闭/重启的实现代码
- PHP CURLFile函数模拟实现文件上传展示
- PHP导出数据超时的优化建议解读
- PHP实现生成二维码代码展示
- 10个技巧优化PHP程序Laravel 5框架
- 全栈工程师看过来!PHP Javascript语法对照、速查
- PHP程序员经常碰到的11个MySQL错误
- PHP 经纬度坐标相关计算方法
- PHP运算符执行顺序对照表
文章评论
评论问答