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

  • 相关阅读:
    实验二 (一) 大小写英文字母表
    JAVA的8种基本数据类型和类型转换
    我的第一个Java程序
    Max Factor 2710 最大的合数的质数因子
    计算质数的各种算法
    Java中instanceof与getClass的区别
    web网页测试用例(非常实用)
    数据库之删除表数据drop、truncate和delete的用法
    解决:Gitlab的developer角色的人没有push权限无法提交(转)
    java后台发送请求并获取返回值(续)
  • 原文地址:https://www.cnblogs.com/wupeiky/p/8430902.html
Copyright © 2011-2022 走看看