note 107924 added to function.is-float
| From: | wschalle{A}{T}gmail{D}{O}{T}com | Date: | Thu, 15 Mar 2012 01:25:57 +0000 |
| Subject: | note 107924 added to function.is-float | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-186672@lists.php.net to get a copy of this message | ||
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
----
Server IP: 69.147.83.197
Probable Submitter: 207.114.92.34
----
Manual Page -- http://www.php.net/manual/en/function.is-float.php
Edit -- https://master.php.net/note/edit/107924
Del: integrated -- https://master.php.net/note/delete/107924/integrated
Del: useless -- https://master.php.net/note/delete/107924/useless
Del: bad code -- https://master.php.net/note/delete/107924/bad+code
Del: spam -- https://master.php.net/note/delete/107924/spam
Del: non-english -- https://master.php.net/note/delete/107924/non-english
Del: in docs -- https://master.php.net/note/delete/107924/in+docs
Del: other reasons-- https://master.php.net/note/delete/107924
Reject -- https://master.php.net/note/reject/107924
Search -- https://master.php.net/manage/user-notes.php