note 107924 deleted from function.is-float by danbrown
| From: | danbrown@php.net | Date: | Thu, 10 May 2012 18:08:42 +0000 |
| Subject: | note 107924 deleted from function.is-float by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-187723@lists.php.net to get a copy of this message | ||
Note Submitter: wschalle {A}{T} gmail {D}{O}{T} com
----
Alas, the final version listed below by ircadhikari still has some flaws. Here is a fixed version
with test output. Not sure how it would do with unicode, but I'm beyond caring at this point.
YMMV.
<?php
//New function -- works
function isFloat($val){
if(is_string($val)) $val = trim($val);
if( is_numeric($val) && ( is_float($val) || ( (float) $val > (int) $val
|| strlen($val) != strlen( (int) $val) ) && (ceil($val)) != 0 )) return true;
else return false;
}
//Old function -- breaks in some cases
function isTrueFloat($val){
if( is_float($val) || ( (float) $val > (int) $val
|| strlen($val) != strlen( (int) $val) ) && (ceil($val)) != 0 ) return true;
else return false;
}
?>
<?php
//tests
function tf($val) {
echo $val . "\t";
echo (isFloat($val))?'true':'false';
echo "\t";
echo (isTrueFloat($val))?'true':'false';
echo "\t";
echo (is_numeric($val))?'true':'false';
echo "\t";
echo (is_string($val))?'true':'false';
echo "\n";
}
echo "value\ttfloat\toldfunc\tnumeric\tstring\n";
//And here's the tests with the test output appended
// value tfloat oldfunc numeric string
tf("2.4"); // 2.4 true true true true
tf("2"); // 2 false false true true
tf('4.0'); // 4.0 true true true true
tf('2.1'); // 2.1 true true true true
tf(0); // 0 false false true false
tf("0"); // 0 false false true true
tf(3.); // 3 true true true false
tf(13); // 13 false false true false
tf("12"); // 12 false false true true
tf(3.53); // 3.53 true true true false
tf("0.27"); // 0.27 true true true true
tf(0.24); // 0.24 true true true false
tf('-24.1'); // -24.1 true true true true
tf(-24.121); // -24.121 true true true false
//While the tests below are not strictly numbers, they should not evaluate as floats.
tf("1num"); // 1num false true false true
tf("num1"); // num1 false false false true
tf(" 1"); // 1 false true true true
tf("1 "); // 1 false true false true
tf("num1.4"); // num1.4 false false false true
tf("num 1.4");// num 1.4 false false false true
tf("1.4num"); // 1.4num false true false true
tf("num1.4"); // num1.4 false false false true