I'd take that as proof of a design flaw in having php 
doing string to float comparison by casting the string to
float instead of the float to a string, but you've got
me - the documentation does say the string will be converted
to a float and not vice-versa.  If it wouldn't be a bad BC
break, I think there'd be a lower WTF by doing the cast
the other way.  "==" means are they the same and "==="
means are they the SAME.  With "==", '1.8' should match
any float that would be displayed as 1.8.  (Of course,
with "===" they aren't even the same type, so you're
false from the start.)  I say "should" from an anti-WTF
perspective.  Again, I must bow to the spec and you have
me there.

Thanks for saving me the hours of discovering all this
via debugging.  Please consider the switching of casts
for string==float for the suggestion box.

- Todd

On Fri, 2008-04-11 at 20:29 -0700, Rasmus Lerdorf wrote:
> There is no bug here.  Please read:
> 
> http://docs.sun.com/source/806-3568/ncg_goldberg.html
> 
> -Rasmus
> 
> Todd Ruth wrote:
> > I'm thinking there must be a bug in the heart of php
> > causing this.  I'll debug it, but I haven't looked at
> > php source code in a few years and would like a tip as
> > to which files are involved in evaluating "==".  Here
> > is a fragment from my code and the output:
> > 
> > ...
> > print "<pre>\n";
> > var_dump($max);
> > var_dump($nms);
> > var_dump($nms == $max);
> > $max = (float)$max;
> > $nms = (string)$nms;
> > var_dump($max);
> > var_dump($nms);
> > var_dump($nms == $max);
> > $max = (string)$max;
> > $nms = (float)$nms;
> > var_dump($max);
> > var_dump($nms);
> > var_dump($nms == $max);
> > print "</pre>\n";
> > ...
> > 
> > string(3) "1.8"
> > float(1.8)
> > bool(false)
> > float(1.8)
> > string(3) "1.8"
> > bool(true)
> > string(3) "1.8"
> > float(1.8)
> > bool(true)
> > 
> > I found this using php 5.2.3.  I just upgraded to php 5.2.5
> > and am receiving the exact same result.  Obviously, I can't
> > reproduce it with a simple var_dump("1.8"==1.8).  :(
> > I guess something is getting corrupted, and I will add debug
> > output until I find out what (or Murphy removes the problem
> > by adding debug output; then I'm not sure what I'll do).
> > 
> > Thanks for any tips on which files I should look at it.
> 


-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to