php7采坑记:浮点型数据比较

简介:

    今天在项目中遇到一个奇怪的问题,经过计算后的double类型的变量的值相等的两个变量进行比较,结果却是不相等。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$a =42735.04;
$b =17806.2;
 
 
$c = $a /36;
$c = round ( $c ,2);
 
$d = $c *15;
 
 
echo  '$b value is: ' $b  . "\n" ;
echo  '$d value is: ' $d  . "\n" ;
 
if ( $b  ==  $d ){
     echo  "ok\n" ;
} else {
     echo  "sorry\n" ;
}


得到结果如下图,明明两个变量的值是一样的,做'=='比较运算却返回false

wKioL1lnLTOCGkbJAAAoYDhHs7w497.jpg




原因是php7中的浮点数 经过 /,*,round()等一系列运算后,精度发生了变化。


解决方案:将任意精度的变量作为字符串进行比较。


php7中已经提供较好的解决方案.

1
2
3
4
5
6
(PHP 4, PHP 5, PHP 7)
bccomp  — 比较两个任意精度的数字
说明
int  bccomp ( string  $left_operand , string  $right_operand [, int  $scale  = int
   ] )
把right_operand和left_operand作比较, 并且返回一个整数的结果.



最终使用bccomp()来进行比较解决问题

1
2
3
4
5
6
if ( bccomp ((string) $b ,(string) $d ,2) === 0){
 
     echo  "yes \n" ;
} else {
     echo  "no \n" ;
}











本文转自 hgditren 51CTO博客,原文链接:http://blog.51cto.com/phpme/1947237,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
JSON PHP 数据格式
|
5天前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
18 3
|
11天前
|
关系型数据库 MySQL 数据库连接
13 PHP数据的获取
路老师在知乎上分享了PHP语言的知识,帮助大家入门和深入理解PHP。本文介绍了从结果集中获取一行数据作为对象(`mysqli_fetch_object()`)、获取一行作为枚举数组(`mysqli_fetch_row()`)、获取查询结果集中的记录数(`mysqli_num_rows()`)、释放内存(`mysqli_free_result()`)以及关闭数据库连接(`mysqli_close()`)的方法,并提供了具体示例代码。
25 3
|
19天前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。
|
3月前
|
数据采集 PHP
PHP中实现简单爬虫与数据解析
【8月更文挑战第31天】在互联网的海洋里,爬虫技术如同一艘探索船,帮助我们搜集和理解信息。本文将带你通过PHP语言,轻松实现一个简单的网页内容抓取工具,并展示如何从抓取的数据中解析出有用信息。我们将一起航行在代码的波浪中,体验从无到有构建一个基本爬虫的过程。
|
3月前
|
数据采集 JavaScript 数据挖掘
如何使用 PHP Simple HTML DOM Parser 轻松获取网页中的特定数据
本文介绍了使用PHP Simple HTML DOM Parser进行网页数据抓取的方法,尤其适用于从懂车帝二手车网站提取汽车品牌、价格和里程等关键信息。首先,安装并配置所需库,使用代理IP和设置cookie与useragent来模拟用户行为,避免被封。然后,通过编写PHP脚本,利用cURL获取网页内容,解析HTML并提取所需数据,最终将数据保存至CSV文件。文章强调了正确配置代理和用户代理的重要性,并提供了完整的PHP代码示例,以帮助读者理解和应用网页抓取技术。
如何使用 PHP Simple HTML DOM Parser 轻松获取网页中的特定数据
|
4月前
|
前端开发 PHP 数据格式
【附带效果视频】php接口给前端返回流式数据,php使用event-stream进行数据推送,循环一次输出一次
【附带效果视频】php接口给前端返回流式数据,php使用event-stream进行数据推送,循环一次输出一次
167 0
|
5月前
|
存储 PHP
php处理带emoji表情的字符数据
php处理带emoji表情的字符数据
30 0
|
5月前
|
PHP
php+ajax传file文件数据
php+ajax传file文件数据
46 0