1.===比较运算符

记得上上篇中说过===与==的问题。当时说,===还要类型相同。但到底是怎样呢?因为我们知道比较运算符是可以把两个值类型转换的。举个栗子,如果一个数字和字符串比较,则字符串会转化为数字进行比较。而===运算符就是一个特例了,她不会进行类型转换。再举个栗子,比如我们要在一个邮箱地址查找@符号的地址就可以用到这个运算符。代码如下

 <?php
if(strpos($_POST['email'],@) === false){
echo "不是正确E-mail地址";
}
?>

strpos函数会返回第一次出现时的下标,如果没有出现就返回false。但是如果我们不用===而用==会出现一个问题,就是当字符出现在第一个位置时,会返回数字0。而拿0去与false比较,false会转换为0,其结果就会不对。所以我们用===来完成这个判断。!==也是一样的效果。

2.浮点数的比较

由于系统的原因,浮点数的精度是有限的。在经过一些操作后,精度的误差会特别大。最后就会导致函数floor((0.1+0.7)*10)的结果不是0.8而是0.7。因为在机器内部的表示中,(0.1+0.7)*10为7.9999999...。所以记住一句话,“永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。”。但我们可以尝试在一定精度下,判断两个浮点数。比如这个判断语句

if(abs($a - $b) < 0.000001)

也就是差值比较。

也可以使用函数bccomp(比较数, 比较数, 比较位数);

比如bccomp('2.23456','2.23457', 3)返回0(表示相等),

bccomp('2.23456','2.23457', 5)返回-1(表示右边大于左边)。

最后,还可以用intval()函数。先把浮点数扩大,然后用这个函数强制转换为整型变量,再进行比较。

PHP初学留神(二)的更多相关文章

  1. Python爬虫初学(二)—— 爬百度贴吧

    Python爬虫初学(二)-- 爬百度贴吧 昨天初步接触了爬虫,实现了爬取网络段子并逐条阅读等功能,详见Python爬虫初学(一). 今天准备对百度贴吧下手了,嘿嘿.依然是跟着这个博客学习的,这次仿照 ...

  2. node.js 初学(二)—— 搭建注册/登录服务器

    node.js 初学(二)—— 搭建注册/登录服务器 理论上来说,代码实现在理论和实际上是一样的.但实际上来说,他们不是 做一个最简单的用户注册登录功能 1.接口定义: 注册:/user?act=re ...

  3. PHP初学留神(五)·小结

    来学习快两个月了,这周末即将回家开始写论文.那么走之前,好好总结一下这两个月的所学所得吧.这段时间,在实验室里做的Web开发主要涉及到了web开发的一些框架内容以及php基础知识.思维导图记录如下. ...

  4. PHP初学留神(三)

    星期一进行面试结束后,意味着我的考研日子也结束了,以及我的2013.在好好总结之后还不能停止学习,心想着要把算法继续学下去,还有Linux.不过呢,始终都要记住尼采老师的这句当头棒喝:“不加选择的知识 ...

  5. Spring初学笔记(二):Bean的注入

    关于Bean的注入 在上一篇中,已经说到虽然注入确实可以降低类与类之间的耦合,但并没有解决调用者必须知道类的创建方法的问题,也可以说是没有实现调用者与类实现的解耦,我们也提到,为了实现两者的解耦,可以 ...

  6. maven初学(二)archeType插件使用

    archeType是一个maven插件,它的主要功能是根据模板来创建工程结构 创建工程结构: 1,创建工程目录 2,输入命令:mvn archetype:generate 3,选择需要的archety ...

  7. html初学(二)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <table bor ...

  8. 初学Ajax(二)

    $.get()和$.post() .load()方法是局部方法,因为它需要一个包含元素的jQuery对象作为前缀.而$.get()和$.post()是全局方法,无须指定某个元素.对于用途而言,.loa ...

  9. 初学Android 二 创建项目以及目录结构

    命令行创建 android create project Usage: android [global options] create project [action options] Global ...

随机推荐

  1. js源码保护

    js的不可读化处理分为三个方面:压缩(compression).混淆(obfuscation) 和加密(encryption). (不可读化处理,这是我自己发明的术语,一切会增加代码不可读性的代码转换 ...

  2. php动态调用方法_sux

    <form  action=""> <input type="hidden" name="mod" id="mo ...

  3. Maven学习小结(二 项目构建过程)

    1.创建Maven项目 1.1 创建Maven项目的约定目录结构 1.2 编辑pom.xml <project xmlns="http://maven.apache.org/POM/4 ...

  4. iOS之设置状态栏颜色

    状态栏的字体为黑色:UIStatusBarStyleDefault 状态栏的字体为白色:UIStatusBarStyleLightContent 一.在info.plist中,将View contro ...

  5. 计算openlayers两点之间的距离

    distanceTo: function(point) { var distance = 0.0; if ((this.x != null) && (this.y != null) & ...

  6. ADS的使用

    ADS是一款强大的软件,应用程序不能直接操作硬件,而ADS程序是无操作系统支持的,可以直接操作硬件,下面来介绍一下ADS的基本使用方法. 编辑本段基本简介: ADS(ARM Developer Sui ...

  7. FastStone Capture 注册码 序列号

    用户名:c1ikm 注册码:AXMQX-RMMMJ-DBHHF-WIHTV 或 AXOQS-RRMGS-ODAQO-APHUU

  8. 【转】为 XmlNode.SelectNodes 加上排序功能

    测试资料: <Config> <Item a='/> <Item a='/> <Item a='/> <Item a='/> <Ite ...

  9. js运动

    一.offsetWidth / offsetHeight 获取整个块的宽度/高度,包括border 二.clientWidth / clientHeight 获取块的宽度/高度,不包括border 三 ...

  10. 微信平台(一)--获取access_token

    事前思路准备 说在前面:如果要获取access_token,那么你需要appid,appsecret;另外需要post请求连接https://api.weixin.qq.com/cgi-bin/tok ...