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

  • 相关阅读:
    jsbeautifier + JScript.NET/JavaScript 编程实现 JavaScript、HTML、CSS 代码格式化脚本命令行工具 并集成到 EditPlus
    EasyTimer
    HttpTaskAsyncHandler IHttpAsyncHandler
    ConcurrentAsyncQueue 20120721
    HttpProxyHandler
    SocketAsyncDataHandler SocketAsyncEventArgs echo server
    DateTimeHelper R2
    managedwifi.codeplex.com
    最广泛报表数据源模型
    报表的发布
  • 原文地址:https://www.cnblogs.com/wupeiky/p/8430902.html
Copyright © 2011-2022 走看看