Hi all,

Since I've been looking at is_numeric_[string|unicode], I found a weird
thing it causes; probably doesn't make sense to users; bug?  Look:

abs(-1e500) // float(INF)
abs('-1e500') // int(1)  WRONG
abs('-1e100') // float(1.0E+100)
is_finite(1e500) // bool(false)
is_finite('1e500') // bool(true)  WRONG
is_finite('1e100') // bool(true)
is_numeric(1e500) // bool(true)
is_numeric('1e500') // bool(false)  WRONG
is_numeric('1e100') // bool(true)
1e500 + 123 // float(INF)
'1e500' + 123 // int(124)  WRONG

You get the idea.  That's because is_numeric_string() *ignores* the value
from zend_strtod() if errno==ERANGE.  I don't think that's right, and it
doesn't happen when convert_to_double() uses zend_strtod():

number_format(1e500) // string(3) "inf"
number_format('1e500') // string(3) "inf"  RIGHT

Just wondering if others think is_numeric_string() should be changed in that
respect?  I was going to rewrite the function to improve/optimize it (and
submit it of course), so I can easily change its behavior while I'm at it...

Also, is this the desired behavior of array_count_values() (manual doesn't
say; it also uses is_numeric...)?

print_r(array_count_values(array(1, '   1', '  1  ')))
Array
(
    [1] => 2
    [  1  ] => 1
)


Matt

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

Reply via email to