较长数字 字符串 的比较问题
本帖最后由 anyilaoliu 于 2013-12-13 15:04:43 编辑
如题
遇到这样的问题
<br />$a = "222111565652521142";<br /> $b = "222111565652521139";<br /> $c = 222111565652521142;<br /> $d = 222111565652521139;<br /><br /> var_dump($a);<br /> echo "<br />";<br /> var_dump($b);<br /> echo "<br />";<br /> var_dump($c);<br /> echo "<br />";<br /> var_dump($d);<br /> echo "<br />";<br /><br /> if ($a == $b) {<br /> echo 3;<br /> }else{<br /> echo 31;<br /> }<br /> echo "<br />";<br /><br /> if ($c == $d) {<br /> echo 4;<br /> }else{<br /> echo 41;<br /> }<br /> echo "<br />";<br />
结果是
<br /><br /><br />string '222111565652521142' (length=18)<br /><br /><br />string '222111565652521139' (length=18)<br /><br /><br />float 2.2211156565252E+17<br /><br /><br />float 2.2211<i style="color:transparent">本¥文来源gaodai$ma#com搞$代*码*网(</i><strong>搞代gaodaima码</strong>156565252E+17<br /><br /><br /><br />31<br />4<br />
问题来了,第二种情况 如何进行两者的比较
问题二: 从数据库中读出来的这两组数字,var_dump后显示是string(18) 但是比较结果和上边的例子恰好相反,两个string的 比较相等 也通过了.
求解
分享到: 更多
——解决方案——————–
我们使用的php环境大多是32位的,而在32位环境中一个长整型数是用4个字节表示的
即 -pow(2,31) 到 pow(2,31) 之间
pow(2,31) = 2147483648
pow(2,32) = 4294967296
这显然不能满足一般的需要,所以 php 在 logn 类型的基础上做了一些扩充。用了6个字节存储1个整型数
也就是可表示 -99999999999999 到 99999999999999 之间的正数,即 14 位整数
而在64位的php中就可轻易的突破这一限制了,因为64位的环境中,一个logn类型本身就是8个字节
——解决方案——————–
用===不会转换
搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:较长数字 字符串 的比较有关问题
转载请注明原文链接:较长数字 字符串 的比较有关问题
