note 107924 added to function.is-float

From: 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

« previous php.notes (#186672) next »