On 13/06/13 10:44, BUSCHKE Daniel wrote:
thanks for your answer. Especially the answer "42" made me laughing :)
My "Why" questions should be understand as "Why must it be like that" questions.
On 13/06/13 08:59, BUSCHKE Daniel wrote:
5. Thats a bug I have opend: https://bugs.php.net/bug.php?id=51739 where I also had the same
problems because "8315e839da08e2a7afe6dd12ec58245d" was converted into float(INF) by
throwing everything starting from "da08.." away.
That's a very different proposition, and probably has more to do with word
size: float is 32-bit, so only the first 32 bits are used and if anything else
is found the conversion falls back to INF. To handle really big integers like
8315e839da08e2a7afe6dd12ec58245d you probably need a more specialist library
For me it is not. PHP throws things away during conversion. In my opinion a
language (compiler, interpreter whatever) should not do that. Never ever!
Either it is able to convert the value or it is not.
What about of returning "null" instead of "0" if the conversion is not perfect?
So intval('F') could return NULL and intval('0') could return 0.
I've had a bit of a play with your big hex number, and the problem is
much more subtle: floatval("8315e839da08e2a7afe6dd12ec58245d") is
truncated at 8315e839 because it tries to parse it as an exponential
float: floatval("8315e83") becomes 8.315 x 10^86, but 8.315e839 is 8.315
x 10^842 which is (as far as PHP is concerned) an infinitely large number!
So we try replacing that first 'e' with a 'd' (for example) and then
php -r 'var_dump(floatval("8315d839da08e2a7afe6dd12ec58245d"));'
It gives up when it finds a non-numeric character (as the documentation
would tell you)
Perhaps what you need is
php -r 'var_dump(floatval(0x8315e839da08e2a7afe6dd12ec58245d));'
In other words, you need to tell the interpreter that you have a number
(in base-16) rather than a string.
A proper strongly-typed language would just tell you that it's nonsense...
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php