What do you expect the result to be? the (int) works exactly as intended.
If you care to read the PHP manual documentation it states:
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.
Emphesis mine
And because this is such a fundamental realisation of the PHP Type Juggling, I would suspect the issue lies less with Magento's type handling and more with your own interpretion of their type handling abilities. There will be better Magento methods you can employ for a more accurate response.
I would suggest the following pseudo code as a work around for your issue:
if((string)$sString != (int)$sString) { //This string is not a number or not only a number. }
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.. It's documented. I didn't downvote you, but you could have found this in about.. 5 sec of googling.