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,在比较字符串时,建议使用全等号(===)

  • 相关阅读:
    C版程序语法 (消除左递归)
    文法
    201506110248 实验报告
    组合数据类型
    UBUNTU四种版本的区别【转】
    MFC对话框程序屏蔽回车与ESC键,Tab键
    std::fstream打开中文路径名失败的问题原因、解决方法以及注意事项
    前进。。。。。。
    程序员学习能力提升三要素[转]
    java学习推荐资源
  • 原文地址:https://www.cnblogs.com/wupeiky/p/8430902.html
Copyright © 2011-2022 走看看