Re: Bug #51739 tricky string to float conversion

From: Date: Thu, 01 Sep 2011 23:41:55 +0000
Subject: Re: Bug #51739 tricky string to float conversion
References: 1 2 3 4 5  Groups: php.general 
Request: Send a blank email to php-general+get-314712@lists.php.net to get a copy of this message
On 1/09/2011, at 8:43 PM, magic-php@damage.devloop.de wrote: > Simon J Welsh writes: >> On 1/09/2011, at 9:53 AM, magic-php@damage.devloop.de wrote: >>> Am Mittwoch, 31. August 2011, 20:48:37 schrieb Shawn McKenzie: >>>> On 08/31/2011 09:03 AM, magic-php@damage.devloop.de wrote: >>>>> var_dump((float)"8315e839da08e2a7afe6dd12ec58245d"); >>>>> results in float(INF) >>>> 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. >>> 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. >> 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. > > Ok, then let's discuss the documented behavior ;-) > Do you (not the document) really like this behavior? I mean if I am the only one wondering > about that behavior it is ok for me. I just want to help PHP. > cheers > Daniel Yes, I think the way it works is correct. It follows similar conversions when changing from a data type that allows more data to one that allows less. Similar things happen when converting from a floating point to integral value. It also directly correlates to the C functions for doing the same thing (atof, strtod, the like). --- Simon Welsh Admin of http://simon.geek.nz/

« previous php.general (#314712) next »