php 数学基础,PHP 基础篇 - PHP 的 BC MATH 系列数学函数
一、常见问题
用 PHP 做计算时经常会遇到精度带来的问题,下面来看两个常见的例子:
1. 运算比较
下面表达式输出的结果不是相等:
echo 2.01 - 0.01 == 2 ? '相等' : '不相等'; // 不相等
2. 类型转换
下面表达式输出的结果不是201(如果想输出你想要的结果,需要先转 string 再转 int):
$num = intval(2.01 * 100);
var_dump($num); // int(200)
你也许会觉得很奇怪,然而这并不是 PHP 的 bug,如果想深入了解可以参考鸟哥的两篇文章:
二、BC MATH
用 PHP 提供的 BC MATH 系列数学函数可以解决上面的问题。对于任意精度的数学计算, BC MATH 提供了支持用字符串表示的任意大小和精度的数字的二进制计算,最多为2147483647-1(或0x7FFFFFFF-1)。
下面用 BC MATH 提供的函数解决上面的问题。
1. 运算比较
bccomp — 比较两个任意精度的数字:
$num = bccomp(2.01 - 0.01, 2, 2);
var_dump($num); // int(0)
注:如果两个数相等返回 0, 左边的数比较右边的数大返回 1, 否则返回-1。
2. 类型转换
bcmul — 2个任意精度数字乘法计算:
$num = bcmul(2.01, 100, 0);
var_dump($num); // string(3) "201"
var_dump(intval($num)); // int(201)
注:返回结果为字符串类型
使用 BC MATH 系列数学函数可以让我们减少失误,避免不必要的错误,如需查看详细参数和其它函数的使用,请查阅 PHP 官方文档:http://php.net/manual/zh/book.bc.php
本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
php 数学基础,PHP 基础篇 - PHP 的 BC MATH 系列数学函数相关推荐
- 【OpenGL基础篇】——使用面向对象方法封装OpenGL函数(二)
今天封装了一个Line类.负责在昨天写的窗体上绘制线条. OpenGL画图是通过给glBegin函数设置參数达成的,绘制线条有三个不同的參数: GL_LINES : 绘制连接两个点的线段(绘制的端点位 ...
- JAVA基础篇【工具类】MathUtil 数学运算辅助类TG【20130324整理】
数学运算辅助类,希望对大家有所帮助 import java.math.BigDecimal; /** * 数学运算辅助类. * * @author Elfy * @date 2013年03月21日 * ...
- 0513JS基础:数组内置方法、数学函数、时间函数
|数组中常用的内置方法 |-push()与pop() |--push()是往数组的尾部添加,同时返回新数组的长度 var attr = [1,2,3,4,5];var attr2 = [6,7,8,9 ...
- SQL Server调优系列基础篇(子查询运算总结)
前言 前面我们的几篇文章介绍了一系列关于运算符的介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符.有兴 ...
- SQL Server调优系列基础篇(联合运算符总结)
前言 上两篇文章我们介绍了查看查询计划的方式,以及一些常用的连接运算符的优化技巧,本篇我们总结联合运算符的使用方式和优化技巧. 废话少说,直接进入本篇的主题. 技术准备 基于SQL Server200 ...
- Nginx实战基础篇一 源码包编译安装部署web服务器
Nginx实战基础篇一 源码包编译安装部署web服务器 版权声明: 本文遵循"署名非商业性使用相同方式共享 2.5 中国大陆"协议 您可以自由复制.发行.展览.表演.放映.广播或通 ...
- Nginx实战基础篇六 通过源码包编译安装部署LNMP搭建Discuz论坛
Nginx实战基础篇六 通过源码包编译安装部署LNMP搭建Discuz论坛 版权声明: 本文遵循"署名非商业性使用相同方式共享 2.5 中国大陆"协议 您可以自由复制.发行.展览. ...
- 计算声学·物理基础篇1
计算声学 @rz_wen 第一部分·物理基础 流体力学 符号说明 c i j k i , j , k = 1 , 2 , 3 c_{ijk} \qquad i,j,k=1,2,3 cijki,j,k ...
- Linux中w r x数学代码,Linux bc命令实现数学计算器
bash shell 内置了对整数运算的支持,但是并不支持浮点运算,而 linux bc 命令可以很方便的进行浮点运算,当然整数运算也不再话下. bc 甚至可以称得上是一种编程语言了,它支持变量.数组 ...
最新文章
- Silverlight调用本机exe程序
- Spring 3整合Quartz 2实现定时任务--转
- SAP CDS view里将Date和time连接成timestamp的函数
- WebSocket数据加密——AES与RSA混合加密
- 15 并发编程-(IO模型)
- python设计要求_Python高级应用程序设计任务要求
- filedisk学习资料
- Linux正在更新缓存卡住,Linux 进程卡住了怎么办?
- 自定义垂直方向滑动的ViewGroup
- 静态分析Android程序
- CTFWeb——Bugku秋名山老司机 详细题解
- 体验车联网,你选对物联网卡了吗?
- 乐吾乐2D可视化之智慧城市可视化(一)
- 夜神模拟器连接手柄无反应_夜神安卓模拟器连接手柄的具体操作方法介绍
- 2020计算机保研经历
- FleaPHP 域名事件搞笑版
- 芯洲电源,一款可以升压降压DCDC开关稳压电源,车规级面世,文章是参数详解
- 裁判文书关键信息提取
- 在System.Timers.Timer的处理程序中调用MessageBox.Show()弹出的确是非模态的
- 计算机丢失UxTheme无法修复,win7电脑系统开机提示uxtheme.dll丢失怎么办
热门文章
- 2021年CSP-S初赛试题
- SimpleDet专栏开篇(热门目标检测框架)
- SpringBoot实现身份证实名认证(阿里云实现)
- 洛谷 P3380 bzoj3196 Tyvj1730 【模板】二逼平衡树(树套树)
- Chrome 浏览器翻译插件划词翻译
- 远程连接阿里云服务器数据库
- 没正常关机自动修复此计算机咋办,Win10非正常关机使用自动修复陷入无限重启该怎么办...
- BLE Mesh (5) —— Lower Transport Layer
- 表头显示后怎么提交php,添加表头工具栏
- HTML图片标签列表表格以及合并单元格,个人简历小案例