Re: Bug #51739 tricky string to float conversion

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 1/09/2011, at 9:53 AM, magic-php@xxxxxxxxxxxxxxxxx wrote:

> Am Mittwoch, 31. August 2011, 20:48:37 schrieb Shawn McKenzie:
>> On 08/31/2011 09:03 AM, magic-php@xxxxxxxxxxxxxxxxx wrote:
>>> Hi,
>>> I have opend Bug #51739 in 2010. It was closed as bogus before my last
>>> question was answered. It would be fine to know what you think about
>>> that bug.
>>> In short:
>>> var_dump((float)"8315e839da08e2a7afe6dd12ec58245d");
>>> results in float(INF)
>>> This is because "8315" is treated as base and
>>> "e839da08e2a7afe6dd12ec58245d" is treated as an exponent. My hint that
>>> "e839da08e2a7afe6dd12ec58245d" is not a valid exponent was not answered.
>>> What do you think about?
>>> cheers
>>> Daniel
>> 
>> The cast to float is truncating the invalid characters and since your
>> string contains a float that is INF (8315e839) before the truncation at
>> the "d", then it returns INF.  Makes perfect sense.
> 
> This is what drives me crazy.
> 
> If I use a string in PHP I don't want PHP to cut this string. Either it uses 
> this string as it is or it gives me an error/warning/false (what ever...). But 
> silently(!!!) using a small piece of a string is not understandable.
> 
> cheers
> Daniel

The manual clearly states this is how a string is converted into a number: http://php.net/manual/en/language.types.string.php#language.types.string.conversion

"The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an 'e' or 'E' followed by one or more digits."

If you don't want the string turned into a number using the documented method, don't use it as one.
---
Simon Welsh
Admin of http://simon.geek.nz/


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux