PHP 精度计算问题(精确算法)
2023-06-13 09:16:21 时间
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
相关文章
- PHP常见面试题_php算法面试题及答案
- 【说站】php变量如何命名
- php源码审计_静态代码审计
- php-实现微信回复天气情况
- PHP 中获取文件名及路径
- CSS 如何设置背景透明,并使用 PHP 将十六进制的颜色值转换成 RGBA 格式
- 页面Linux下PHP页面显示问题排查(linux不能显示php)
- 的应用利用PHP中MySQL函数实现功能强大的数据库操作(php中mysql函数)
- Linux重启PHP的命令操作指南(linux重启php命令)
- PHP扩展Redis:建立强大的缓存架构(php扩展redis)
- PHP如何使用Redis连接: 代码实例(php连接redis代码)
- PHP中的Redis类:快速高效地管理数据(redis类php)
- PHP使用Redis实现数据存储(php连接redis)
- PHP连接MS SQL服务器添加数据(php 添加mssql)
- PHP 和 MSSQL 扩展库无缝集成(php mssql扩展库)
- 原生PHP灵活使用Redis编写高效代码(原生php使用redis)
- 内存Redis自动优化PHP内存管理(redis自动释放php)
- php中文字符入库或显示乱码问题的解决方法
- php入门学习知识点六PHP文件的读写操作代码
- PHP新手用的Insert和Update语句构造类
- php数据结构与算法(PHP描述)查找与二分法查找
- PHP万年历实现代码
- 用C实现PHP扩展Image_Tool图片常用处理工具类的使用
- PHP可变函数的使用详解
- phpmyadminconfig.inc.php配置示例
- PHP利用func_get_args和func_num_args函数实现函数重载实例