Re: [PHP-DEV] Integer casts broken or...?

2001-05-14 Thread Brian Moon

This is correct.  The type casting converts the string into its integer
value.  If there is a non-numeric character in the string, it stops at that
point.  So 09 is 9 and 09t is 9 but 0t9 is 0.

Brian Moon
--
dealnews.com, Inc.
Makers of dealnews, dealmac
http://dealnews.com/ | http://dealmac.com/


- Original Message -
From: Lars Torben Wilson [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Monday, May 14, 2001 1:29 PM
Subject: [PHP-DEV] Integer casts broken or...?



 Type casting to int from string works only for decimal values--is this
 by design? Example:

 echo (int) '09' . ', ' . (int) '0x24';

 ...produces:

 9, 0

 which seems intuitively wrong (I'd have expected 0, 36).

 Is this wrong, or should I just document it?


 Thanks,

 Torben

 --
  Torben Wilson [EMAIL PROTECTED]
  http://www.thebuttlesschaps.com
  +1.604.709.0506


 --
 PHP Development Mailing List http://www.php.net/
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 To contact the list administrators, e-mail: [EMAIL PROTECTED]





-- 
PHP Development Mailing List http://www.php.net/
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]




Re: [PHP-DEV] Integer casts broken or...?

2001-05-14 Thread Lars Torben Wilson

Brian Moon writes:
 This is correct.  The type casting converts the string into its integer
 value.  If there is a non-numeric character in the string, it stops at that
 point.  So 09 is 9 and 09t is 9 but 0t9 is 0.
 
 Brian Moon

Yeah, I know--it winds up being a strtol() call. However, since PHP
does interpret octal and hex integer literals, it seems odd that it
won't interpret them when encapsulated in strings. This does look
intentional though, since strtol() is called with a base of 10 in
zend_operators.c (line 259 in cvs); replacing it with a base of 0
gives the result I (personally) would have expected.

So--is it intentional because it would screw some people up to have
left-zero-padded string numbers interpreted as octals, or is there
another deeper reason that using 0 as the base for strtol() is a bad
idea, or is this unintentional?


 - Original Message -
 From: Lars Torben Wilson [EMAIL PROTECTED]
 To: [EMAIL PROTECTED]
 Sent: Monday, May 14, 2001 1:29 PM
 Subject: [PHP-DEV] Integer casts broken or...?
 
 
 
  Type casting to int from string works only for decimal values--is this
  by design? Example:
 
  echo (int) '09' . ', ' . (int) '0x24';
 
  ...produces:
 
  9, 0
 
  which seems intuitively wrong (I'd have expected 0, 36).
 
  Is this wrong, or should I just document it?
 
 
  Thanks,
 
  Torben
 
  --
   Torben Wilson [EMAIL PROTECTED]
   http://www.thebuttlesschaps.com
   +1.604.709.0506
 
 
  --
  PHP Development Mailing List http://www.php.net/
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]
  To contact the list administrators, e-mail: [EMAIL PROTECTED]
 
 
 
 

-- 
 Torben Wilson [EMAIL PROTECTED]
 http://www.thebuttlesschaps.com
 +1.604.709.0506


-- 
PHP Development Mailing List http://www.php.net/
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]




Re: [PHP-DEV] Integer casts broken or...?

2001-05-14 Thread Lars Torben Wilson

Brian Moon writes:
 I know it would confuse me to have 0009 turned into an octal or hex if I
 type cast it to (int).  When I think of (int), I only think of their
 ultimate decimal value.  Perhaps there needs to be a new type cast ((hex)?
 (oct)?) that will interpret variables in their hex or octal value.  I know
 it is still a long integer in value, but it is a different representation of
 that number.

That's along the lines of what I was thinking--another cast (and
perhaps an optional arg to intval()?) which would respect the
base--maybe not separate (oct) or (hex)--or maybe so--or something
like (intbase) which just respected the base (since octal and hex are
the only ones strtol() claims to handle anyway). I admit that name is
clumsy at best. :) As it stands is_numeric('0x24') returns true but
intval('0x24') returns 0--which seems to conflict. Changing the
existing cast would probably surprise a lot of people though :).

 As for why it was that way to begin with, I am not sure.  I could be that it
 would be too confusing like you say or that type casting was introduced
 before using hex or octal numbers was.

Ah, the world is so full of unanswered questions. :)

 Brian Moon
 --
 dealnews.com, Inc.
 Makers of dealnews, dealmac
 http://dealnews.com/ | http://dealmac.com/
 
 
 - Original Message -
 From: Lars Torben Wilson [EMAIL PROTECTED]
 To: Brian Moon [EMAIL PROTECTED]
 Cc: [EMAIL PROTECTED]
 Sent: Monday, May 14, 2001 4:55 PM
 Subject: Re: [PHP-DEV] Integer casts broken or...?
 
 
  Brian Moon writes:
   This is correct.  The type casting converts the string into its integer
   value.  If there is a non-numeric character in the string, it stops at
 that
   point.  So 09 is 9 and 09t is 9 but 0t9 is 0.
  
   Brian Moon
 
  Yeah, I know--it winds up being a strtol() call. However, since PHP
  does interpret octal and hex integer literals, it seems odd that it
  won't interpret them when encapsulated in strings. This does look
  intentional though, since strtol() is called with a base of 10 in
  zend_operators.c (line 259 in cvs); replacing it with a base of 0
  gives the result I (personally) would have expected.
 
  So--is it intentional because it would screw some people up to have
  left-zero-padded string numbers interpreted as octals, or is there
  another deeper reason that using 0 as the base for strtol() is a bad
  idea, or is this unintentional?
 
 
   - Original Message -
   From: Lars Torben Wilson [EMAIL PROTECTED]
   To: [EMAIL PROTECTED]
   Sent: Monday, May 14, 2001 1:29 PM
   Subject: [PHP-DEV] Integer casts broken or...?
  
  
   
Type casting to int from string works only for decimal values--is this
by design? Example:
   
echo (int) '09' . ', ' . (int) '0x24';
   
...produces:
   
9, 0
   
which seems intuitively wrong (I'd have expected 0, 36).
   
Is this wrong, or should I just document it?
   
   
Thanks,
   
Torben
   
--
 Torben Wilson [EMAIL PROTECTED]
 http://www.thebuttlesschaps.com
 +1.604.709.0506
   
   
--
PHP Development Mailing List http://www.php.net/
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail:
 [EMAIL PROTECTED]
   
   
   
  
 
  --
   Torben Wilson [EMAIL PROTECTED]
   http://www.thebuttlesschaps.com
   +1.604.709.0506
 
 
 
 
 
 -- 
 PHP Development Mailing List http://www.php.net/
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 To contact the list administrators, e-mail: [EMAIL PROTECTED]
 

-- 
 Torben Wilson [EMAIL PROTECTED]
 http://www.thebuttlesschaps.com
 +1.604.709.0506


-- 
PHP Development Mailing List http://www.php.net/
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]