zoukankan      html  css  js  c++  java
  • 浅谈PHP数字字符串比较

    在比较两个数字字符串时,大家往往都会表现出惊讶的表情,为什么结果跟预期的不一样?以下是我踩过的坑,跟大家分享一下:

    1、'01' == '1' 

    结果:true   

    原因:当遇到形似数字的字符串,PHP会将此类字符串转为数字,然后做比较,所以会返回true 

    2、0 == 'a'   

    结果:true   

    原因:当数字跟字符串比较时,PHP会尝试将字符串转数字后进行比较,开头不为数字的字符串都会被转为0,所以0 == 0 

    举例:0 == 'acd'    返回true   

    3、'200' == '2e2'

    结果:true 

    原因:结合第一条,PHP尝试将两者转数字,在转的过程中,支持科学计数法,所以2e2=2*(10^2)=200,所以返回true

    举例:10 == '1e1' 返回true

    4、1 == '1a'

    结果:true

    原因:当数字跟字符串比较时,PHP会尝试将字符串转数字后进行比较,PHP将字符串尝试转为数字('1a' => 1),然后进行比较,所以返回true

    5、12345678900000000000 == 12345678900000000001,12345678900000000000 === 12345678900000000001

    结果:true

    原因:在PHP中,如果一个整数在定义或者计算赋值后超出了当前环境int型的最大值(目前是超出19位),php的做法是将这个整数转换为float型,并以科学计数法进行存储。而这一过程,会带来精度的损失,所以两者在损失精度并存储为float型的情况下,存储的值是一致的【float(1.23456789E+19)】,所以返回true

    注意:PHP7以前的版本支持将多进制的数值转换,所以'1'=='0x1'是成立的,但新版本是false,在比较字符串时,建议使用全等号(===)

  • 相关阅读:
    Sublime Text 3 快捷键汇总
    jquery远程引用地址大全
    我的网站以后要如何设计
    word中特殊符号的替换
    如何有效地提升JavaScript 水平?
    HTML5坦克大战(2)绘制坦克复习
    JavaScript中的对象冒充
    让年轻程序员少走弯路的14个忠告
    ASCII
    可以用旋转法绘制平行四边形
  • 原文地址:https://www.cnblogs.com/wupeiky/p/8430902.html
Copyright © 2011-2022 走看看