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. 文件I/O(不带缓冲)之open函数

    调用open函数可以打开或创建一个文件. #include <fcntl.h> int open( const char *pathname, int oflag, ... /* mode ...

  2. Asp.Net 5使用第三方容器

    这几天在学习Asp.Net 5,现在文档以及博客之类的资料实在太少了,不看源码几乎举步维艰,好在全都是开源的,看看微软的代码也获益良多. 看到DependencyInjection的代码里除了默认的容 ...

  3. Java基础知识强化之网络编程笔记14:TCP之多个客户端上传到一个服务器的思考(多线程改进)

    1. 多个客户端上传到一个服务器的思考 通过while循环可以改进一个服务器接收多个客户端. 但是这个是有问题的.如果是这种情况,假设我还有张三,李四,王五这三个人分别执行客户端  张三:好好学习.a ...

  4. SQL Server用存储过程新建视图

    CREATE PROCEDURE [dbo].[p_GetV_view]ASBEGIN DECLARE @sqlstr1 varchar(255) DECLARE @sqlstr2 varchar(2 ...

  5. /lib /usr/lib /usr/local/lib 区别

    简单说,/lib是内核级的,/usr/lib是系统级的,/usr/local/lib是用户级的. /lib/ — 包含许多被 /bin/ 和 /sbin/ 中的程序使用的库文件.目录 /usr/lib ...

  6. 业界最有价值的 ASP.NET 博文汇总

    ASP.NET凭借它丰富的控件,强大的适应性及良好的封装性,成为业界开发的一门巨匠,它大大缩短了网站开发的时间,降低开发成本.并且可以运行在Web应用软件开发者的全部平台上.本电子书汇集了业界最有价值 ...

  7. [转]使用Oracle SQL Developer连接数据库并创建用户

    本文转自:http://blog.csdn.net/xw13106209/article/details/6594738 1.使用sys账户创建数据库连接 安装Oracle 11g会自带一个叫做SQL ...

  8. asp.net 中excel 导入数据库

    protected void Button1_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(Sy ...

  9. oracle数据库优化

    1.不用“<>”或者“!=”操作符.对不等于操作符的处理会造成全表扫描,可以用“<” or “>”代替 不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描.推荐方 ...

  10. ###Linux基础 - 2

    点击查看Evernote原文. #@author: gr #@date: 2014-10-13 #@email: forgerui@gmail.com 一.Linux基础命令2 mount: 挂载U盘 ...