php高精度数据运算问题
在php中的加减运算中,会出现浮点数精度丢失的情况,例子如下:
<?php $a = 35; $b = 34.99; echo $b; echo '<br />'; echo json_encode($b); echo '<br />'; echo ($a - $b); echo '<br />'; echo bcadd($a,$b,6); $c=2/3; $b=1/3; echo '<br />'; echo $c+$b; ?>
运行结果如下:
相减之后出现了精度丢失的情况,查了网上无数的教程,有建议添加ini_set设置精度,测试如下
<?php ini_set('precision', -1); ini_set('serialize_precision', -1); $a = 35; $b = 34.99; echo $b; echo '<br />'; echo json_encode($b); echo '<br />'; echo ($a - $b); echo '<br />'; echo bcadd($a,$b,6); $c=2/3; $b=1/3; echo '<br />'; echo $c+$b; ?>
添加后运行结果如图:发现并不好使,
后来查看php手册,其中对于这两个php初始化设置的介绍是这样的:
从说明中可以看出 precision是控制浮点数显示有效数字的位数,并不是控制小数点后多少位的,
同理,serialize_precision是控制序列化时,浮点数显示有效数据的位数。
然后再通过努力的查找,发现,php提供了一套高精度运算函数,亲测有效
在php的数据运算中会出现数据精度丢失的问题,但是php提供了一套函数,
PHP 为任意精度数学计算提供了二进制计算器(Binary Calculator),它支持任意大小和精度的数字,以字符串形式描述
bcadd — 加法
bccomp — 比较
bcdiv — 相除
bcmod — 求余数
bcmul — 乘法
bcpow — 次方
bcpowmod — 先次方然后求余数
bcscale — 给所有函数设置小数位精度
bcsqrt — 求平方根
bcsub — 减法
分类:
php相关
posted on 2020-11-16 19:20 1450811640 阅读(385) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~